Замена Javascript не имеет никакого эффекта

#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:

Вот простой способ написать это, используя версию обратного attr вызова практически каждого метода jQuery:

 $(document).ready(function() {
    $('.child').attr('rel', function(i, relName) {
        $(this).appendTo('#'   relName);
        return relName.replace('amp;','');
    });
}); 
  

Комментарии:

1. Действительно, очень аккуратно. 1 для нового решения. Когда вы говорите «почти», какие функции jQuery не имеют обратных вызовов?

2. @JamWaffles: я не сказал «почти».

3. basically Вместо этого вы сказали. Я просто хочу знать, какие функции не имеют обратных вызовов, или есть ли их список где-нибудь.