2008-10-07 57 views
72

所有子元素说我有以下几点:选择除第一

<ul> 
<li>First item</li> 
<li>Second item</li> 
<li>Third item</li> 
</ul> 

我怎么会选择所有使用jQuery后的第一个子元素?所以,我可以做到这样的:

<ul> 
<li>First item</li> 
<li class="something">Second item</li> 
<li class="something">Third item</li> 
</ul> 

回答

125

您应该能够使用“不”和“第一个孩子”选择。

$("li:not(:first-child)").addClass("something"); 

http://docs.jquery.com/Selectors/not

http://docs.jquery.com/Selectors/firstChild

+0

我试过这个: $('。certificateList input:checkbox:not(:first-child)') 但它没有工作.... – 2008-10-07 13:27:13

+0

这会比下面列出的Slice方法慢吗? – 2008-10-07 13:59:51

+0

非常感谢。这对我也有帮助... – GusDeCooL 2010-10-05 07:56:08

13

http://docs.jquery.com/Traversing/slice

$("li").slice(1).addClass("something"); 
+0

这是一个很好的答案,但我觉得我选择的答案是更明确的用法。任何新进入该项目的人都可以更快地掌握选择器中正在执行的操作。 – 2008-10-12 01:24:33

1

这是我的工作至今

$('.certificateList input:checkbox:gt(0)') 
2

这应该工作

$('ul :not(:first-child)').addClass('something'); 
9

更ELEG蚂蚁查询(选择由li元素前面的所有li元素):

$('ul li+li')

2

我会使用基于我在这里的四种方法完全不科学的分析

$("li:gt(0)").addClass("something"); 
30

,它看起来就像他们之间没有很多速度差异一样。我在包含一系列不同长度的无序列表的页面上运行它们,并使用Firebug分析器对它们进行计时。

$("li").slice(1).addClass("something"); 

平均时间:5.322ms

$("li:gt(0)").addClass("something"); 

平均时间:5.590ms

$("li:not(:first-child)").addClass("something"); 

平均时间:6.084ms

$("ul li+li").addClass("something"); 

平均时间:7.831ms