2012-05-11 76 views
8

我想从jquery选择器中排除第一个和第二个元素。我尝试这样做:jquery选择器 - 排除第一个和第二个

$('p:not(:nth-child(1),:nth-child(2))') 

但这仅排除的第一个元素...感谢

+0

如果你的第一个和第二个孩子实际上是'p'元素,这应该是有效的。像这样的问题在提供工作标记时最好。 – BoltClock

回答

16

这个jQuery序列使用.slice(),丢弃$('p')选择前两个元素:

$('p').slice(2). 

参见http://jsfiddle.net/alnitak/zWV7Z/

注意,这是不一样nth-child - ,而不是在DOM中的相对位置排除基于所述整个集合在第一选择中发现的元素。

+0

我更喜欢这个解决方案。谢谢 – simPod

0
$('p').not($('p').eq(0), $('p').eq(1)) 
14

简单:

$('p:gt(1)') 

http://api.jquery.com/gt-selector/

演示 http://jsfiddle.net/NtFYq/1/

如参宿一的评论指出,如果性能是一个问题,你可以用他的slice解决方案

个非常感谢@Alnitak指出了这一点:)

+0

是的,它可以工作,但效率会低于'.slice()',因为伪选择器将阻止使用本地querySelectorAll()函数。 – Alnitak

+0

+1,呃,好酷。 – undefined

+0

@Alnitak指出,谢谢:) –

2

尝试:

参考: http://www.w3.org/TR/selectors/#negation

从参考: “的否定伪类,:没有(X) ,是一个函数表示法,它将简单选择器(不包括否定伪类本身)作为参数。“

+0

这与CSS相关,但不适用于jQuery; jQuery版本的':not()'选择器允许使用逗号分隔的任意复杂选择器的列表,并且在jQuery字符串中编写CSS有效版本的唯一原因是性能(请参阅其中一个的评论关于'querySelectorAll()'的答案)。我会尽快发布详细说明这种差异的问题...... – BoltClock

+1

如果你真的想写一个CSS有效的版本,它应该是'p:not(:nth-​​child(1)):not(:nth-​​child(2))',而不是'p:not(:第n个孩子(1))以下,p:(:第n个孩子(2))'。再次,这将在我的文章中介绍。 – BoltClock

+0

@BoltClock:我知道,选择器需要产生否定联合[1st,2nd]而不是每个[1st]和[2nd]否定的联合,因为后者将包含自[1st ]和[第二]是相互独立的。谢谢。 – Faust

相关问题