2011-03-24 75 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