jQuery首先选择all

时间:2010-02-13 22:44:30

标签: jquery jquery-selectors

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

<div class='test'></div>
<div class='test'></div>
<div class='test'></div>

4 个答案:

答案 0 :(得分:545)

$("div.test:not(:first)").hide();

或:

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

或:

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

或:

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

或:(根据@Jordan Lev的评论):

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

等等。

请参阅:

答案 1 :(得分:28)

由于jQuery选择器的评估方式是从右到左,因此评估会降低可读性li:not(:first)的速度。

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

e.g。

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

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

这比slice(1)慢了几个百分点,但是非常可读,因为&#34;我想要除了第一个以外的所有&#34;。

答案 2 :(得分:3)

我的回答集中在一个扩展案例,该案例源自暴露于最顶层的案例。

假设您有一组要从中隐藏子元素的元素,除了第一个元素。举个例子:

<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元素。因此,这将无效,因为会隐藏除.child以外的所有visible#1元素:

    $('.child:not(:first)').hide();
    
  2. 解决方案(在此扩展案例中)将是:

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

答案 3 :(得分:1)

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