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.

1804
demandé sur John Slegers 2009-06-25 02:28:58

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')
2330
répondu Sasha Chedygov 2015-12-12 15:21:15

vous pouvez le faire en utilisant la filter() fonction:

$(".a").filter(".b")
150
répondu Jamie Love 2017-01-30 13:56:34

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')
103
répondu juanpaulo 2016-12-30 15:52:07

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')
49
répondu John Slegers 2016-12-29 14:44:03

$('.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>
33
répondu user2298171 2017-12-27 07:52:32

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")

22
répondu macio.Jun 2012-12-14 16:15:11

Vanilla JavaScript solution: -

document.querySelectorAll('.a.b')

22
répondu Salman Abbas 2015-01-29 18:02:58

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.

16
répondu Tejas Shah 2015-09-28 05:26:30

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") 
6
répondu Surya R Praveen 2017-05-17 13:57:26

vous n'avez pas besoin de jQuery pour ce

Dans Vanilla vous pouvez le faire :

document.querySelectorAll('.a.b')
1
répondu Sandwell 2018-04-04 08:00:13

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 .

0
répondu bahman parsamanesh 2018-08-01 10:41:07