each() внутри each() и addClass внутри hasClass почему-то не работает

#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 перед первым циклом, и теперь оно работает идеально. Иногда вам просто нужна вторая пара глаз 🙂 Спасибо!