2275 votes

Comment sélectionner un élément avec plusieurs classes en jQuery ?

Je veux sélectionner tous les éléments qui ont les deux classes a y b .

<element class="a b">

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

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

2 votes

Ce serait bien si vous pouviez définir ce que signifie union et intersection pour nous, les néophytes :)

10 votes

@KolobCanyon L'union et l'intersection sont des concepts de base de la théorie des ensembles. Ainsi, par exemple, une union serait constituée de tous les francophones (incluant à la fois les hommes et les femmes), tandis qu'une intersection serait constituée de toutes les femmes qui parlent français (excluant toutes les personnes qui ne parlent pas français, et excluant toutes les personnes qui ne sont pas des femmes). Les unions et les intersections peuvent être réalisées avec un nombre quelconque de caractéristiques définissant chaque ensemble. fr.wikipedia.org/wiki/Union_(set_theory) fr.wikipedia.org/wiki/Intersection_(set_theory)

7 votes

Je pense que vous voulez dire que des deux ensembles "femmes" et "francophones", l'union serait toutes les femmes du monde et tous les francophones du monde, un ensemble qui inclut à la fois les femmes qui ne parlent pas français et les hommes francophones. L'intersection est, comme vous l'avez écrit, uniquement les femmes qui parlent français.

2862voto

Sasha Chedygov Points 36783

Si vous souhaitez ne faire correspondre que les éléments avec les deux (une intersection, comme un ET logique), il suffit d'écrire les sélecteurs ensemble. sans espaces entre les deux :

$('.a.b')

L'ordre n'est pas pertinent, vous pouvez donc également intervertir les classes :

$('.b.a')

Ainsi, pour correspondre à un div qui a un ID de a avec des cours b y c vous écrivez :

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

(En pratique, vous n'avez probablement pas besoin d'être aussi précis, et un sélecteur d'ID ou de classe suffit généralement : $('#a') .)

10 votes

@Flater : C'était juste pour donner un exemple. Mais ça pourrait être utile si les classes b y c sont ajoutées dynamiquement, et vous ne voulez sélectionner l'élément que s'il possède ces classes.

37 votes

@Shimmy : Oui. Un espace entre deux sélecteurs signifie que vous recherchez les descendants ; c'est-à-dire que .a .b recherche les éléments avec la classe b qui sont des descendants d'un élément de classe a . Donc quelque chose comme div a ne retournera que a éléments qui sont à l'intérieur de a div élément.

184voto

Jamie Love Points 2984

Vous pouvez le faire en utilisant le filter() fonction :

$(".a").filter(".b")

17 votes

Quelle est la différence entre cette réponse et la réponse acceptée ?

52 votes

@Rice : Celui-ci sera un peu plus lent, car il construira d'abord une liste d'objets de classe "a", puis supprimera tous les objets sauf ceux qui ont la classe "b", alors que le mien le fait en une seule étape. Mais sinon, aucune différence.

138voto

juanpaulo Points 306

Pour le cas

<element class="a">
  <element class="b c">
  </element>
</element>

Vous devez mettre un espace entre .a y .b.c

$('.a .b.c')

42voto

user2298171 Points 91
$('.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>

27voto

macio.Jun Points 1857

Il suffit de mentionner un autre cas avec élément :

Par exemple <div id="title1" class="A B C">

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X