2012-04-09 121 views
4

我有6個元素的集合,我想過濾每個第二個和第三個元素,所以我想要元素2,3,5和6.我試過.filter(':nth-child(2n+1)'));但很明顯,過濾2,4和6.從每個元素的三元組中選擇第二個和第三個元素

我想要的另一種方式是刪除元素1和4,但我找不到一個jQuery函數是相反的過濾器,將刪除元素從集合中。

+1

你能否解釋一下「每2N和3N」如何包括#5,但不包括#4?你的意思是_「我想要元素2,3,4和6」_? – Phrogz 2012-04-09 19:28:50

+0

我同意Phrogz您的問題沒有正確說明。在我看來,你真正想要做的是跳過第一個元素,然後跳過第三個元素。換句話說,你想跳過每個有n%1 = 1的元素。 – 2012-04-09 19:48:14

+0

@Progrog不,我認爲ephemient答案解釋了我想要的更好。 「每組3人中的第二和第三」 – 2012-04-09 19:56:51

回答

3

以你爲例,我不認爲你真的想要2n和3n。你想每個3組中的第二和第三?那麼這些任何一個應該工作:

.filter(':nth-child(3n+2), :nth-child(3n+3)')); 
.filter(':not(:nth-child(3n+1))'); 
4
.filter(':not(:nth-child(1),:nth-child(4))') 

http://jsbin.com/owosuw/2/edit#source

+0

啊,我怎麼能忘記! – 2012-04-09 19:25:03

+1

順便說一句,如果你真的需要選擇每2n和3n元素,你應該使用.filter(':nth-​​child(2n),:nnth-child(3n)') – 2012-04-09 19:26:39

+0

@VladMinaev感謝您的回答,但我覺得喜歡ephemient答案好一點,我可以用它來比6更大的集合,所以我給了他們正確的答案。仍然給你一個+1。 – 2012-04-09 19:52:16

1

我認爲你不能只用一個nth-child做到這一點。我不知道你想做什麼,但如果你想給它一個風格或類別,事件或類別的東西,你可以把它們全部並從第1和第4中刪除:

$('div').addClass('red'); 

$('div:nth-child(3n+1)').removeClass('red'); 

活生生的例子:http://jsfiddle.net/gnbMH/


您也可以使用兩個nth-child s到得到它的工作:

$('div:nth-child(3n+2)').addClass('red'); 
$('div:nth-child(3n+3)').addClass('red'); 

活生生的例子:http://jsfiddle.net/gnbMH/1/


您還可以結合兩個nth-child秒,然後你會得到這樣的事情:

var elems = $('div:nth-child(3n+2)'); 
$('div:nth-child(3n+3)').each(function(i,elem) { 
    elems.push(elem); 
}); 

$(elems).addClass('red'); 

活生生的例子:http://jsfiddle.net/gnbMH/2/

+0

未來,不要將關鍵的應答代碼留在JSFiddle中:也將它放在答案中! :) – Phrogz 2012-04-09 19:27:26

+0

@Progrog謝謝。我通常這樣做,但我不知道爲什麼不現在......我編輯了評論 – 2012-04-09 19:57:30

0

嘗試使用:not(:nth-child(3n+1)) ..喜歡的東西.filter(':not(:nth-child(3n+1))').

DEMO

2

您還可以使用filter與函數(接受單個參數,該參數是匹配元素的從零開始的號碼):

$('div').filter(function(n) { return n%3!=0 }) 

見我的jsfiddle驗證的概念在這裏:

http://jsfiddle.net/4c4Re/

相關問題