Comment puis-je sélectionner un élément avec plusieurs classes dans jQuery?
je veux sélectionner tous les éléments qui ont les deux classes a
et b
.
<element class="a b">
ainsi, seuls les éléments qui ont les deux classes .
quand j'utilise $(".a, .b")
ça me donne le syndicat, mais je veux l'intersection.
11 réponses
si vous voulez une intersection, écrivez simplement les sélecteurs ensemble sans espaces entre.
$('.a.b')
donc pour un élément qui a un ID de a
avec les classes b
et c
, vous écririez:
$('#a.b.c')
vous pouvez le faire en utilisant la filter()
fonction:
$(".a").filter(".b")
pour l'affaire
<element class="a">
<element class="b c">
</element>
</element>
Vous devez mettre un espace entre .a
et .b.c
$('.a .b.c')
le problème que vous avez, c'est que vous utilisez un Group Selector
, alors que vous devriez utiliser un Multiples selector
! Pour être plus précis, vous utilisez $('.a, .b')
alors que vous devriez utiliser $('.a.b')
.
pour plus d'informations, voir l'aperçu des différentes façons de combiner les sélecteurs ci-dessous!
Sélection De Groupe : ","
sélectionner tous <h1>
éléments et tous <p>
d'éléments ET de tous les <a>
éléments :
$('h1, p, a')
sélecteur de Multiples : ""(sans caractère)
sélectionner tous les <input>
éléments de type
text
, avec classes code
et red
:
$('input[type="text"].code.red')
sélecteur Descendant: ""(espace)
sélectionner tous <i>
éléments à l'intérieur <p>
éléments:
$('p i')
Sélecteur D'Enfant: "> "
sélectionner tous les <ul>
éléments qui sont les enfants immédiats d'un <li>
élément:
$('li > ul')
Sélecteur De Frères Et Sœurs Adjacent: "+ "
sélectionner tous les <a>
éléments qui sont placés immédiatement après <h2>
éléments:
$('h2 + a')
Général Sélecteur De Frères : "~"
sélectionnez tous les <span>
éléments qui sont frères et sœurs de <div>
éléments:
$('div ~ span')
$('.a .b , .a .c').css('border', '2px solid yellow');
//selects b and c
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="a">a
<div class="b">b</div>
<div class="c">c</div>
<div class="d">d</div>
</div>
il suffit de mentionner un autre cas avec élément:
E. G. <div id="title1" class="A B C">
il suffit de taper: $("div#title1.A.B.C")
Vanilla JavaScript solution: -
document.querySelectorAll('.a.b')
pour une meilleure performance, vous pouvez utiliser
$('div.a.b')
cela ne regarde que les éléments div au lieu de passer à travers tous les éléments html que vous avez sur votre page.
Sélecteur De Groupe
body {font-size: 12px; }
body {font-family: arial, helvetica, sans-serif;}
th {font-size: 12px; font-family: arial, helvetica, sans-serif;}
td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
devient:
body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
donc dans votre cas vous avez essayé le sélecteur de groupe alors que c'est une intersection
$(".a, .b")
utilisez plutôt ce
$(".a.b")
vous n'avez pas besoin de jQuery
pour ce
Dans Vanilla
vous pouvez le faire :
document.querySelectorAll('.a.b')
Vous pouvez utiliser getElementsByClassName()
méthode pour ce que vous voulez.
var elems = document.getElementsByClassName("a b c");
elems[0].style.color = "green";
console.log(elems[0]);
<ul>
<li class="a">a</li>
<li class="a b">a, b</li>
<li class="a b c">a, b, c</li>
</ul>
C'est aussi la solution la plus rapide. vous pouvez voir un benchmark à ce sujet ici .