Обход скрытых элементов li - PullRequest
2 голосов
/ 20 июня 2011

Мне нужно добавить классы для элементов li в ul #colorlist в определенных местах. Таким образом, каждый 15-й элемент li становится одним классом, каждый 16-й становится другим (15-му необходимо перевернуться, а 16-е - первое в ряду). Это достаточно просто с этим:

    $('#colorlist li:nth-child(15n+1)' ).addClass('first-column');

Однако у меня есть различные фильтры, которые скрывают элементы li, и возникает проблема, заключающаяся в том, что скрытые из них по-прежнему считаются. Я думаю, что-то вроде этого может быть правильным подходом, но во многих здесь я не уверен. Идея состоит в том, чтобы проверить, равняется ли общее число, деленное на 15, целому числу. Если это так, я бы применил свой класс.

   $("#colorlist li").each(function(){
   if($("#colorlist li:visible").size() % 15 == ???)$(this).addClass('first-column');
   });

Не уверен, как вы тестируете целое число, или как вы будете использовать его для каждого 15-го предмета. Как вы можете видеть, я как бы потерялся! Любая помощь высоко ценится.

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

Думаю, вы захотите:

$("#colorlist li:visible")
  .filter(function(i){ return i % 15 === 0;})
  .addClass('first-column');

Это вычислит позицию только с учетом видимых элементов.

DEMO

0 голосов
/ 20 июня 2011

Проблема может заключаться в том, что вы передаете каждый элемент li в jQuery.each.Попробуйте:

$("#colorlist li:visible").each(function(i, elem){
   var $el = $(this);
   //If is 0 add class
   if( i % 15 === 0 ){
       $el.addClass('first-column');
   }
});

Демо здесь: http://jsfiddle.net/tomgrohl/473ky/

...