Question

Je souhaite sélectionner tous les éléments ayant les deux classes a et b.

<element class="a b">

Donc, seuls les éléments qui ont les deux classes.

Quand j'utilise $(".a, .b") cela me donne l'union, mais je veux l'intersection.

Était-ce utile?

La solution

Si vous souhaitez uniquement faire correspondre les éléments avec les deux classes (une intersection, comme un ET logique), écrivez simplement les sélecteurs sans espaces entre:

$('.a.b')

La commande n'est pas pertinente, 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 écrirez:

$('div#a.b.c')

(En pratique, vous n'avez probablement pas besoin d'obtenir cette information, et un sélecteur d'ID ou de classe suffit en général: $('#a').)

Autres conseils

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 façons de combiner les sélecteurs ci-dessous!

Sélecteur de groupe: & ", &";

Sélectionnez tous les <h1> éléments ET tous les <p> éléments ET tous les <a> éléments:

.
$('h1, p, a')

Sélecteur de multiples: " " (pas de caractère)

Sélectionnez tous les <input> éléments de type text, avec les classes code et red:

.
$('input[type="text"].code.red')

Sélecteur de descendants: " " (espace)

Sélectionnez tous les <i> éléments à l'intérieur de <ul> éléments:

$('p i')

Sélecteur d'enfants: & "; > &";

Sélectionnez tous les <li> éléments qui sont les enfants immédiats d'un <h2> élément:

$('li > ul')

Sélecteur de fratrie adjacent: & "; + &";

Sélectionnez tous les <span> éléments placés immédiatement après <div> éléments:

$('h2 + a')

Sélecteur de parenté générale: & "; ~ &";

Sélectionnez tous les <=> éléments frères de <=> é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'élément:

E.g. <div id="title1" class="A B C">

Tapez simplement: $("div#title1.A.B.C")

Solution JavaScript Vanilla: -

document.querySelectorAll('.a.b')

Pour de meilleures performances, vous pouvez utiliser

$('div.a.b')

Ceci 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 cette option

Dans Vanilla vous pouvez faire:

document.querySelectorAll('.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 consulter un repère à propos de cette ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top