#javascript #jquery
#javascript #jquery
Вопрос:
Это jQuery:
<script type="text/javascript">
$(document).ready(function(){
var relName;
$('.child').each(function() {
relName = $(this).attr('rel');
relName.replace('amp;','');
$(this).attr('rel', relName);
$(this).appendTo('#' $(this).attr('rel'));
});
});
</script>
С этим соответствующим HTML:
<div rel="MadDogsamp;EnglishmenHandpaintedfigurines" id="Figurines" class="category section child">
<h3 class="categoryTitle">Figurines</h3>
</div>
Но по какой-то причине замена не имеет никакого эффекта!
Комментарии:
1. Я не уверен, что это вся ваша проблема, но
amp;
она должна бытьamp;amp;
в HTML.
Ответ №1:
replace
возвращает строку с замененными данными. Поэтому вам нужно присвоить обратно вашей переменной.
relName = relName.replace('amp;','');
Комментарии:
1. Потрясающе! Клянусь, раньше я видел, как это было написано по-другому: S
Ответ №2:
replace()
не изменяет исходную строку, она возвращает новую.
Комментарии:
1. 1, потому что это правильный ответ, но было бы еще лучше с примером 😉
Ответ №3:
Это не обновление, потому что вы ничему не присваиваете результат.
Попробуйте это вместо:
$(this).attr('rel', relName.replace('amp;',''));
Ответ №4:
Вот простой способ написать это, используя версию обратного вызова практически каждого метода jQuery: attr
$(document).ready(function() {
$('.child').attr('rel', function(i, relName) {
$(this).appendTo('#' relName);
return relName.replace('amp;','');
});
});
Комментарии:
1. Действительно, очень аккуратно. 1 для нового решения. Когда вы говорите «почти», какие функции jQuery не имеют обратных вызовов?
2. @JamWaffles: я не сказал «почти».
3.
basically
Вместо этого вы сказали. Я просто хочу знать, какие функции не имеют обратных вызовов, или есть ли их список где-нибудь.