2011-03-24 105 views
4

在jQuery中,我想添加一個類到所有可見的元素是第五個孩子或更大,另一個類不是第四個孩子的每個元素。然而限制:第n個孩子的結果爲可見元素

$overlay.find('> .container .content .selector').not(':nth-child(4n)').addClass('hasRightMargin'); 
$overlay.find('> .container .content .selector:nth-child(n+5)').addClass('hasTopMargin'); 

,現在我切換第一.selector的知名度,並:nth-child沒有考慮知名度考慮,所以這也不行,因爲我想,因爲它仍然計數:以前,我這樣做隱形元素:

$overlay.find('> .container .content .selector:visible').not(':nth-child(4n)').addClass('hasRightMargin'); 
$overlay.find('> .container .content .selector:visible:nth-child(n+5)').addClass('hasTopMargin'); 

有沒有辦法做我想在一個選擇器?或者我將不得不使用each遍歷所有.selector元素並在手動過濾它們?

+0

所以你試圖選擇屏幕上每隔4個可見元素以外的其他東西? – EvilAmarant7x 2011-03-24 18:25:15

+0

我也認爲你應該將'5th元素或更高'的選擇器更改爲:gt(4)。我覺得它不那麼令人困惑,而應該讓它與你的可見選擇器一起工作。 – EvilAmarant7x 2011-03-24 18:35:51

+0

@Evil是的。第二行應該選擇所有可見的元素,但前四個。 – Aistina 2011-03-24 18:36:00

回答

1

我認爲這應該會有所斬斷。

$overlay.find('> .container .content .selector:visible:not(:odd:odd)').addClass('hasRightMargin'); 
$overlay.find('> .container .content .selector:visible:gt(3)').addClass('hasTopMargin'); 

您的主要問題是,第n個子選擇是他們的父母的第n個子所有元素,在集合中的第n個元素。另外,請記住諸如odd,:even,:gt,:lt之類的選擇器是0索引的。所以:奇數選擇元素1,3,5等。這是頁面上的第2,第4,第6個元素。並且:odd:odd選擇頁面上的每個第四個元素。同樣,:gt(3)選擇索引爲4或更大的所有元素,這是第5個元素及其以後的元素。

請參閱here爲jsfiddle,我認爲,演示你在找什麼。請注意經過的隱藏div。

+0

好!我以前從未見過':odd:odd'。從你的jsFiddle來看,這似乎完全符合我的要求,我明天將在測試中測試它,並會接受你的答案,假設它沒有問題:) – Aistina 2011-03-24 19:24:16

+0

@Aistina現在,如果你問過如何選擇每個第五元素或什麼,除了使用循環以外,我不知道。 – EvilAmarant7x 2011-03-24 19:29:52

+0

@Aistina其實,我發現.filter()會成爲你想要的其他第n個元素。所以 $ overlay.find('> .container .content .selector:visible')。filter(function(index){return((index + 1)%4!= 0);})。addClass('hasRightMargin' ); 也可以。 – EvilAmarant7x 2011-03-25 12:38:16

0

您可以在應用您的:nth-​​child選擇器之前對可見元素使用.find()嗎?也許類似

$overlay.find("> :visible").find('.container .content .selector').not(':nth-child(4n)')... 
+1

這已經或多或少是我在示例代碼的第一行做的不起作用的。 – Aistina 2011-03-24 11:39:21