选择除了第一个之外的所有子元素

86

假设我有以下内容:

<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>
8个回答

145

我尝试了这个:$('.certificateList input:checkbox :not(:first-child)')但它没有起作用... - Chris Canal
这个方法会比下面列出的切片方法慢吗? - Chris Marasti-Georg

39

基于我完全不科学的分析,看起来这四种方法中速度差别不大。我在一个包含一系列长度不同的无序列表的页面上运行了每个方法,并使用Firebug分析器计时。

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

平均时间:5.322毫秒

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

平均时间:5.590毫秒

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

平均时间:6.084毫秒

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

平均时间:7.831毫秒


4
我发现这个问题是因为我需要获取除第一个子元素外的所有子元素。 我正在对一个 div 中的所有 h3 进行操作。 我在我的页面上运行了三个查询,就像你上面所说的那样,并且得出 :not(:first-child) 是最快的,比其他方式快 2-3 倍。 我认为页面结构的方式也可能影响性能。 无论如何,这个答案教会了我如何使用 Firebug 分析器,谢谢你。 - RedWolves

13

这是一个不错的答案,但我觉得我选择的答案更加明确。对于项目中的新手来说,他们会更快地理解选择器中正在进行的操作。 - Chris Canal

9
更优雅的查询(选择所有在li元素之前的li元素):

$('ul li+li')


1
$("li+li") 可能比 $("li:not(:first-child)") 更快。 - Sergey Ilinsky

3

我会使用

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

3

这应该可以正常工作。

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

1
使用jQuery的.not()方法。
$('li').not(':first').addClass('something');

或者

var firstElement = $('li').first();
$('li').not(firstElement).addClass('something');

如果子元素不全是相同的元素类型,这个方法就适用。 你可以为父元素创建选择器,然后使用.children()选择器,再加上.not(':first')选择器。 - undefined

1

这是我目前所做的工作

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接