Je veux sélectionner tous les éléments qui ont les deux classes a
et b
.
<element class="a b">
Donc, seuls les éléments qui ont les deux classes.
Quand je l'utilise $(".a, .b")
ça me donne l'union, mais je veux l'intersection.
Je veux sélectionner tous les éléments qui ont les deux classes a
et b
.
<element class="a b">
Donc, seuls les éléments qui ont les deux classes.
Quand je l'utilise $(".a, .b")
ça me donne l'union, mais je veux l'intersection.
Réponses:
Si vous souhaitez faire correspondre uniquement les éléments avec les deux classes (une intersection, comme un ET logique), écrivez simplement les sélecteurs sans espaces entre les deux:
$('.a.b')
L'ordre n'est pas pertinent, vous pouvez donc également échanger les classes:
$('.b.a')
Donc, pour faire correspondre un div
élément qui a un ID a
avec avec des classes b
et c
, vous écririez:
$('div#a.b.c')
(En pratique, vous n'avez probablement pas besoin d'obtenir ce détail, et un ID ou un sélecteur de classe suffit généralement:. $('#a')
)
b
et c
sont ajoutées dynamiquement, et vous ne souhaitez sélectionner l'élément que s'il possède ces classes.
.a .b
recherche des éléments avec classe b
qui sont des descendants d'un élément avec classe a
. Donc, quelque chose comme div a
ne retournera a
que les éléments qui sont à l' intérieur d' un div
élément.
Vous pouvez le faire en utilisant la filter()
fonction:
$(".a").filter(".b")
.a
et que vous devez filtrer plusieurs classes arbitraires basées sur plusieurs fois et qui appartiennent également à l' .a
ensemble d' origine .
Pour le cas
<element class="a">
<element class="b c">
</element>
</element>
Vous auriez besoin de mettre un espace entre .a
et.b.c
$('.a .b.c')
$('.a .c.b')
fonctionnerait-il également?
$('.a > element')
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 façons 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électionnez tous les <input>
éléments de type
text
, avec les classes code
et red
:
$('input[type="text"].code.red')
Sélectionnez tous les <i>
éléments à l'intérieur des <p>
éléments:
$('p i')
Sélectionnez tous les <ul>
éléments qui sont les enfants immédiats d'un <li>
élément:
$('li > ul')
Sélectionnez tous les <a>
éléments placés immédiatement après les <h2>
éléments:
$('h2 + a')
Sélectionnez tous les <span>
éléments qui sont frères et sœurs d' <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>
Solution JavaScript vanille: -
document.querySelectorAll('.a.b')
Pour de meilleures performances, vous pouvez utiliser
$('div.a.b')
Cela ne regardera 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 pouvez utiliser la 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 une référence à ce sujet ici .