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


81

说我有以下几点:

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

Answers:



36

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

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

平均时间:5.322毫秒

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

平均时间:5.590ms

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

平均时间:6.084ms

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

平均时间:7.831ms


3
我遇到了这个问题,因为除了第一个孩子之外,我需要让所有孩子都得到。我正在div中所有的h3上执行此操作。我像在页面上一样运行了三个查询,并以:not(:first-child)最快的速度运行了2-3倍。我认为页面的结构方式也可能会影响配置文件的速度。无论哪种方式,尽管此答案都教会了我如何使用Firebug分析器的功能,但我对此表示感谢。
RedWolves


9

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

$('ul li+li')


1
$(“ li + li”)的运行速度可能比$(“ li:not(:first-child)”)


2

这应该工作

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


0

使用jQuery .not()方法

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

要么

var firstElement = $('li').first();
$('li').not(firstElement).addClass('something');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.