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")
, cela me donne l'union, mais je veux l'intersection.
Si vous voulez ne faire correspondre que des éléments avec les deux classes (une intersection, comme un ET logique), écrivez simplement les sélecteurs ensemble sans espaces entre:
$('.a.b')
L'ordre n'est pas pertinent, vous pouvez donc également échanger les classes:
$('.b.a')
Donc, pour faire correspondre un élément div
ayant un identifiant de a
avec les classes b
et c
, vous écririez:
$('div#a.b.c')
(En pratique, vous n'avez probablement pas besoin d'obtenir cette information, et un sélecteur d'identifiant ou de classe suffit en général: $('#a')
.)
Vous pouvez le faire en utilisant la fonction filter()
:
$(".a").filter(".b")
Pour le cas
<element class="a">
<element class="b c">
</element>
</element>
Vous devez insérer un espace entre .a
et .b.c
$('.a .b.c')
Le problème que vous rencontrez 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, consultez l'aperçu des différentes manières de combiner les sélecteurs ci-dessous!
Sélectionnez tous les _<h1>
_ éléments ET tous les _<p>
_ éléments ET tous les _<a>
_ éléments:
_$('h1, p, a')
_
Sélectionne tous les éléments _<input>
_ de type
text
, avec les classes code
et red
:
_$('input[type="text"].code.red')
_
Sélectionnez tous les éléments _<i>
_ à l'intérieur des éléments _<p>
_:
_$('p i')
_
Sélectionnez tous les éléments _<ul>
_ qui sont les enfants immédiats d'un élément _<li>
_:
_$('li > ul')
_
Sélectionnez tous les éléments _<a>
_ qui sont placés immédiatement après les éléments _<h2>
_:
_$('h2 + a')
_
Sélectionnez tous les éléments _<span>
_ frères de l'un des éléments _<div>
_:
_$('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 element:
Par exemple. <div id="title1" class="A B C">
Il suffit de taper: $("div#title1.A.B.C")
Solution JavaScript Vanille: -
document.querySelectorAll('.a.b')
Pour de meilleures performances, vous pouvez utiliser
$('div.a.b')
Cela ne concernera que les éléments div au lieu de parcourir 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 ceci:
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 ceci
$(".a.b")
Vous n'avez pas besoin de jQuery
pour cela
Dans Vanilla
vous pouvez faire:
document.querySelectorAll('.a.b')
Vous pouvez utiliser la méthode getElementsByClassName()
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 point de repère à ce sujet ici .