Chcę wybrać wszystkie elementy, które mają dwie klasy a
i b
.
<element class="a b">
Tak więc tylko elementy, które mają obie klasy.
Kiedy $(".a, .b")
go używam , daje mi związek, ale chcę skrzyżowania.
Chcę wybrać wszystkie elementy, które mają dwie klasy a
i b
.
<element class="a b">
Tak więc tylko elementy, które mają obie klasy.
Kiedy $(".a, .b")
go używam , daje mi związek, ale chcę skrzyżowania.
Odpowiedzi:
Jeśli chcesz dopasować tylko elementy do obu klas (przecięcie, jak logiczne AND), po prostu napisz selektory razem bez spacji między:
$('.a.b')
Kolejność nie jest istotna, więc możesz także zamieniać klasy:
$('.b.a')
Tak aby dopasować div
element, który ma identyfikator a
z klas b
i c
, byś napisać:
$('div#a.b.c')
(W praktyce, najprawdopodobniej nie trzeba się tego specyficznego i ID lub klasy selektor sama jest zwykle na tyle: $('#a')
).
b
i c
są dodawane dynamicznie, a element chcesz wybrać tylko wtedy, gdy ma te klasy.
.a .b
szuka elementów z klasą, b
które są potomkami elementu z klasą a
. Więc coś div a
zwróci jedynie a
elementy, które są w środku w div
elemencie.
Możesz to zrobić za pomocą filter()
funkcji:
$(".a").filter(".b")
.a
i musisz wielokrotnie filtrować na podstawie różnych arbitralnych klas, które również należą do oryginalnego .a
zestawu.
W przypadku
<element class="a">
<element class="b c">
</element>
</element>
Musisz wstawić spację pomiędzy .a
i.b.c
$('.a .b.c')
$('.a .c.b')
również działa?
$('.a > element')
Problemem jest to, że używasz Group Selector
, podczas gdy powinieneś używać Multiples selector
! Mówiąc ściślej, używasz, $('.a, .b')
podczas gdy powinieneś używać $('.a.b')
.
Aby uzyskać więcej informacji, zapoznaj się z omówieniem różnych sposobów łączenia selektorów poniżej!
Wybierz wszystkie <h1>
elementy ORAZ wszystkie <p>
elementy ORAZ wszystkie <a>
elementy:
$('h1, p, a')
Wybierz wszystkie <input>
elementy type
text
, z klasami code
i red
:
$('input[type="text"].code.red')
Wybierz wszystkie <i>
elementy wewnątrz <p>
elementów:
$('p i')
Wybierz wszystkie <ul>
elementy, które są bezpośrednimi elementami potomnymi <li>
elementu:
$('li > ul')
Wybierz wszystkie <a>
elementy, które są umieszczane bezpośrednio po <h2>
elementach:
$('h2 + a')
Wybierz wszystkie <span>
elementy, które są rodzeństwem <div>
elementów:
$('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>
Waniliowe rozwiązanie JavaScript: -
document.querySelectorAll('.a.b')
Aby uzyskać lepszą wydajność, możesz użyć
$('div.a.b')
Spowoduje to przejrzenie tylko elementów div zamiast przejścia przez wszystkie elementy HTML, które masz na swojej stronie.
Selektor grup
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;}
Staje się to:
body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
Więc w twoim przypadku próbowałeś selektora grupy, podczas gdy jest to skrzyżowanie
$(".a, .b")
zamiast tego użyj tego
$(".a.b")
Możesz użyć getElementsByClassName()
metody do tego, co chcesz.
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>
Jest to również najszybsze rozwiązanie. widać odniesienia o tym tutaj .