jQuery Sélectionner tout sauf en premier
Dans jQuery comment utiliser un sélecteur pour accéder à tout sauf le premier d'un élément? Ainsi, dans le code suivant, seuls les deuxième et troisième éléments seraient accessibles. Je sais que je peux y accéder manuellement, mais il pourrait y avoir un certain nombre d'éléments, donc c'est pas possible. Grâce.
<div class='test'></div>
<div class='test'></div>
<div class='test'></div>
4 réponses
$("div.test:not(:first)").hide();
Ou:
$("div.test:not(:eq(0))").hide();
Ou:
$("div.test").not(":eq(0)").hide();
Ou:
$("div.test:gt(0)").hide();
Ou: (selon le commentaire de @Jordan Lev):
$("div.test").slice(1).hide();
Et ainsi de suite.
Voir:
En raison de la façon dont les sélecteurs jQuery sont évalués de droite à gauche, le li:not(:first)
très lisible est ralenti par cette évaluation.
Une solution tout aussi rapide et facile à lire utilise la version de la fonction .not(":first")
:
Par exemple
$("li").not(":first").hide();
JSPerf: http://jsperf.com/fastest-way-to-select-all-expect-the-first-one/6
Ce n'est que quelques points de pourcentage plus lent que slice(1)
, mais est très lisible comme "je veux tout sauf le premier un".
Ma réponse est axée sur un cas étendu dérivé de celui exposé en haut. Cas Étendu:
Supposons que vous ayez un groupe d'éléments à partir duquel vous souhaitez masquer les éléments enfants sauf en premier. À titre d'exemple:
<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>
- nous voulons tout cacher ".enfant " éléments sur chaque groupe. Donc, cela ne va pas aider parce que va cacher tout ".éléments enfants "sauf" visible#1":
$('.child:not(:first)').hide();
- la solution (dans ce cas étendu) être:
$('.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>