Ich möchte alle Elemente auswählen, die die beiden Klassen aund 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 aund 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 divElement mit einer ID von amit Klassen bund cabzugleichen, 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').)
bund cdynamisch hinzugefügt werden und Sie das Element nur auswählen möchten, wenn es diese Klassen enthält.
.a .bsucht nach Elementen mit Klasse b, die Nachkommen eines Elements mit Klasse sind a. So etwas wie div agibt nur aElemente zurück, die sich innerhalb eines divElements befinden.
Sie können dies mit der filter()Funktion tun :
$(".a").filter(".b")
.aund mehrmals basierend auf verschiedenen beliebigen Klassen filtern müssen, die ebenfalls zum ursprünglichen .aSatz gehören.
Im Falle
<element class="a">
<element class="b c">
</element>
</element>
Sie müssten ein Leerzeichen zwischen .aund 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 codeund 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 .