Je veux sélectionner tous les éléments qui ont les deux classes aet 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 aet 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 aavec avec des classes bet 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'))
bet csont ajoutées dynamiquement, et vous ne souhaitez sélectionner l'élément que s'il possède ces classes.
.a .brecherche des éléments avec classe bqui sont des descendants d'un élément avec classe a. Donc, quelque chose comme div ane retournera aque 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")
.aet que vous devez filtrer plusieurs classes arbitraires basées sur plusieurs fois et qui appartiennent également à l' .aensemble d' origine .
Pour le cas
<element class="a">
<element class="b c">
</element>
</element>
Vous auriez besoin de mettre un espace entre .aet.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 codeet 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 .