#jquery
#jquery
Вопрос:
Еще одна проблема с головой, на этот раз! Почему все в приведенном ниже работает, за исключением ОДНОЙ строки addClass()?
var arr = ['1000','1001','1002','1003','1004','1005'],
allarr = 0;
$.each(arr, function(i, value) {
$('#parent ul.list1 li a, #parent ul.list2 li a').each(function() {
if($(this).hasClass('n-' value)) {
console.log('yes for: ' $(this).html()); //WORKS: it lists 6x "Something"
allarr ; //WORKS: in the end, it says "6"
$(this).addClass('active'); //DOES NOT WORK.
} else {
$(this).removeClass('active');
}
});
});
console.log('allarr: ' allarr);
HTML:
<ul class="list1">
<li><a class="n-1000">Something</a></li>
<li><a class="n-1001">Something</a></li>
<li><a class="n-1003">Something</a></li>
<li><a class="n-1005">Something</a></li>
</ul>
<ul class="list2">
<li><a class="n-1002">Something</a></li>
<li><a class="n-1004">Something</a></li>
<li><a class="n-1006 active">Something that should have the active class REMOVED</a></li>
</ul>
Странно, не так ли? И я был бы признателен за помощь. Спасибо!
ОБНОВЛЕНИЕ: я только что заменил $(this).addClass('active');
на $(this).addClass('active areyoukidding');
— и угадайте что, этот второй класс добавляется без проблем. active
по-прежнему просто игнорируется. Кто-нибудь сталкивался с этим ранее? В приложении нет другого места, где это можно было бы переопределить позже; и я уже добавляю active
классы во многие другие места в скрипте.
Ответ №1:
Вы перебираете каждый элемент шесть раз…
- Для элемента
1000
добавьтеactive
, удалитеactive
из всего остального. - Для элемента
1001
добавьтеactive
, удалитеactive
из всего остального (отменяет выше) - …
поскольку элемент 1005
является последним, который выполняет эту логику, останется только он с active
Комментарии:
1. Что ж, вы абсолютно правы. Конечно. Я переместил предложение else перед первым циклом, и теперь оно работает идеально. Иногда вам просто нужна вторая пара глаз 🙂 Спасибо!