Ich möchte alle Elemente auswählen, die die beiden Klassen a
und haben b
.
<element class="a b">
Also nur die Elemente, die beide Klassen haben.
Wenn ich es benutze $(".a, .b")
, gibt es mir die Vereinigung, aber ich möchte die Kreuzung.
Ich möchte alle Elemente auswählen, die die beiden Klassen a
und haben b
.
<element class="a b">
Also nur die Elemente, die beide Klassen haben.
Wenn ich es benutze $(".a, .b")
, gibt es mir die Vereinigung, aber ich möchte die Kreuzung.
Antworten:
Wenn Sie nur Elemente mit beiden Klassen abgleichen möchten (ein Schnittpunkt wie ein logisches UND), schreiben Sie die Selektoren einfach ohne Leerzeichen dazwischen zusammen:
$('.a.b')
Die Reihenfolge ist nicht relevant, daher können Sie auch die Klassen austauschen:
$('.b.a')
Um also ein div
Element mit einer ID von a
mit Klassen b
und c
abzugleichen, würden Sie schreiben:
$('div#a.b.c')
(In der Praxis müssen Sie höchstwahrscheinlich nicht so spezifisch sein, und eine ID oder Klassenauswahl allein reicht normalerweise aus : $('#a')
.)
b
und c
dynamisch hinzugefügt werden und Sie das Element nur auswählen möchten, wenn es diese Klassen enthält.
.a .b
sucht nach Elementen mit Klasse b
, die Nachkommen eines Elements mit Klasse sind a
. So etwas wie div a
gibt nur a
Elemente zurück, die sich innerhalb eines div
Elements befinden.
Sie können dies mit der filter()
Funktion tun :
$(".a").filter(".b")
.a
und mehrmals basierend auf verschiedenen beliebigen Klassen filtern müssen, die ebenfalls zum ursprünglichen .a
Satz gehören.
Im Falle
<element class="a">
<element class="b c">
</element>
</element>
Sie müssten ein Leerzeichen zwischen .a
und setzen.b.c
$('.a .b.c')
$('.a .c.b')
auch funktionieren?
$('.a > element')
Das Problem, das Sie haben, ist, dass Sie ein verwenden Group Selector
, während Sie ein verwenden sollten Multiples selector
! Um genauer zu sein, verwenden Sie, $('.a, .b')
während Sie verwenden sollten $('.a.b')
.
Weitere Informationen finden Sie in der Übersicht über die verschiedenen Möglichkeiten, Selektoren zu kombinieren.
Wählen Sie alle <h1>
Elemente UND alle <p>
Elemente UND alle <a>
Elemente aus:
$('h1, p, a')
Wählen Sie alle <input>
Elemente aus type
text
, mit Klassen code
und red
:
$('input[type="text"].code.red')
Wählen Sie alle <i>
Elemente in <p>
Elementen aus:
$('p i')
Wählen Sie alle <ul>
Elemente aus, die einem <li>
Element unmittelbar untergeordnet sind:
$('li > ul')
Wählen Sie alle <a>
Elemente aus, die unmittelbar nach den <h2>
Elementen platziert werden:
$('h2 + a')
Wählen Sie alle <span>
Elemente aus, die Geschwister von <div>
Elementen sind:
$('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>
Vanilla JavaScript-Lösung: -
document.querySelectorAll('.a.b')
Für eine bessere Leistung können Sie verwenden
$('div.a.b')
Dies wird nur durch die div-Elemente schauen, anstatt durch alle HTML-Elemente zu gehen, die Sie auf Ihrer Seite haben.
Gruppenauswahl
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;}
Wird dies:
body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
In Ihrem Fall haben Sie also die Gruppenauswahl ausprobiert, während es sich um eine Kreuzung handelt
$(".a, .b")
Verwenden Sie stattdessen diese
$(".a.b")
Sie können die getElementsByClassName()
Methode für das verwenden , was Sie wollen.
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>
Dies ist auch die schnellste Lösung. Sie können einen Benchmark sehen , dass hier .