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

Posted

技术标签:

【中文标题】选择除第一个之外的所有子元素【英文标题】:Select all child elements except the first 【发布时间】:2010-09-15 18:11:24 【问题描述】:

假设我有以下内容:

<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>

【问题讨论】:

【参考方案1】:

您应该能够使用“not”和“first child”选择器。

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

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

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

【讨论】:

我试过这个:$('.certificateList input:checkbox :not(:first-child)') 但它没有用.... 这会比下面列出的 Slice 方法慢吗?【参考方案2】:

根据我对这里四种方法的完全不科学的分析,看起来它们之间的速度差异并不大。我在包含一系列不同长度的无序列表的页面上运行每一个,并使用 Firebug 分析器对它们进行计时。

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

平均时间:5.322ms

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

平均时间:5.590 毫秒

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

平均时间:6.084 毫秒

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

平均时间:7.831 毫秒

【讨论】:

我遇到了这个问题,因为我需要得到除第一个之外的所有孩子。我正在对 div 中的所有 h3 执行此操作。我在我的页面上运行了您上面提到的三个查询,结果 :not(:first-child) 是最快的 2-3 倍。我认为您的页面结构方式也可能影响配置文件速度。不管怎样,虽然这个答案教会了我如何使用 Firebug 分析器,但我感谢你。【参考方案3】:

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

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

【讨论】:

这是一个不错的答案,但我觉得我选择的答案是更明确的用法。任何刚接触该项目的人都可以更快地掌握选择器中正在执行的操作。【参考方案4】:

更优雅的查询(选择所有以 li 元素开头的 li 元素):

$('ul li+li')

【讨论】:

$("li+li") 可能会比 $("li:not(:first-child)") 工作得更快【参考方案5】:

这应该可以工作

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

【讨论】:

【参考方案6】:

我会用

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

【讨论】:

【参考方案7】:

这就是我目前所做的工作

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

【讨论】:

【参考方案8】:

使用 jQuery .not() 方法

$('li').not(':first').addClass('something');

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

【讨论】:

以上是关于选择除第一个之外的所有子元素的主要内容,如果未能解决你的问题,请参考以下文章

选择除第一个之外的所有“tr”

jQuery选择除第一个以外的所有内容

使用纯 css 隐藏除第一个元素之外的所有元素

有没有办法为“除第一个/最后一个之外的所有元素”指定CSS简写?

如何使用选择器来定位除第一个之外的所有目标

jQuery删除除第一行之外的所有表行