jQueryselect除了第一个

在jQuery中,如何使用select器来访问除了第一个元素之外的所有元素? 所以在下面的代码中只会访问第二个和第三个元素。 我知道我可以手动访问它们,但可能有任何数量的元素,所以这是不可能的。 谢谢。

<div class='test'></div> <div class='test'></div> <div class='test'></div> 
 $("div.test:not(:first)").hide(); 

要么:

 $("div.test:not(:eq(0))").hide(); 

要么:

 $("div.test").not(":eq(0)").hide(); 

要么:

 $("div.test:gt(0)").hide(); 

要么:

 $("div.test").gt(0).hide(); 

或:(根据@Jordan列弗的评论):

 $("div.test").slice(1).hide(); 

等等。

看到:

由于jQueryselect器是从右到左进行评估的,所以可读性li:not(:first)会被评估放慢。

同样快速且易于阅读的解决scheme是使用函数版本.not(":first")

例如

 $("li").not(":first").hide(); 

JSPerf: http ://jsperf.com/fastest-way-to-select-all-expect-the-first-one/6

这只比slice(1)慢了几个百分点,但是非常容易理解,因为“除了第一个以外,我都需要”。

我的答案集中在一个从顶部暴露的延伸案例。 扩展案例:

假设你有一组元素,除了第一个元素外,你想隐藏这些元素。 举个例子:

 <html> <div class='some-group'> <div class='child child-0'>visible#1</div> <div class='child child-1'>xx</div> <div class='child child-2'>yy</div> </div> <div class='some-group'> <div class='child child-0'>visible#2</div> <div class='child child-1'>aa</div> <div class='child child-2'>bb</div> </div> </html> 
  1. 我们要隐藏每个组的所有“.child”元素。 所以这将无济于事,因为会隐藏除“可见#1”之外的所有“.child”元素:

$('.child:not(:first)').hide();

  1. 解决scheme(在这个扩展的情况下)将是:

$('.some-group').each(function(i,group){ $(group).find('.child:not(:first)').hide(); });

 $(document).ready(function(){ $(".btn1").click(function(){ $("div.test:not(:first)").hide(); }); $(".btn2").click(function(){ $("div.test").show(); $("div.test:not(:first):not(:last)").hide(); }); $(".btn3").click(function(){ $("div.test").hide(); $("div.test:not(:first):not(:last)").show(); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button class="btn1">Hide All except First</button> <button class="btn2">Hide All except First & Last</button> <button class="btn3">Hide First & Last</button> <br/> <div class='test'>First</div> <div class='test'>Second</div> <div class='test'>Third</div> <div class='test'>Last</div>