2011-06-20 88 views
2

我需要在特定位置的ul #colorlist中爲li項添加類。因此,每一個第15個項目變成一個班級,每16個變成另一個(第15個需要翻轉翻轉,第16個是連續的第一個)。這是與此很容易:遍歷隱藏的li元素

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

但是我當時有哪些隱藏裏的項目,然後問題就來了,該隱藏的人仍會計入各種過濾器。我認爲像這樣的東西可能是正確的方法,但在這裏我不確定。這裏的想法是測試總數除以15是否等於整數。如果是這樣,我會申請我的班級。

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

不知道如何測試一個整數,或者你將如何使用它的每一個第15項。正如你所看到的我有點失落!任何幫助非常感謝。

+0

你怎麼隱藏自己的'li'元素?如果你使用'display:none',它們不會被計數。 –

+0

我正在使用jQuery顯示和隱藏命令。根據螢火蟲「躲」給他們一個展示:沒有,但第十一個孩子仍然計數他們。 – hmon

回答

3

我想你可能想:

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

這將只計算採取可見的元素進去的位置。

DEMO

+1

+1,可以用'return!(i%15)來減少甚至更多的字符' – Niklas

+0

非常感謝,這很好。只需要注意像我這樣的其他排名初學者閱讀這些內容 - 我將它改爲(i + 1)%15 === 0,這樣可以擺脫第一次獲得課程的興趣,並且每隔15分鐘就會獲得一次。 – hmon

+0

@hmon:我不確定那個,因爲你的第一個代碼示例中的':nth-​​child(15n + 1)'也會選擇第一個元素。但無論如何:)你也可以做'我%15 === 14'。 –

0

的問題可能是你的每一個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/

+0

謝謝 - 這也適用於我 – hmon