Eu quero selecionar todos os elementos que têm as duas classes a
e b
.
<element class="a b">
Portanto, apenas os elementos que possuem ambas as classes.
Quando uso $(".a, .b")
, me dá a união, mas quero o cruzamento.
Eu quero selecionar todos os elementos que têm as duas classes a
e b
.
<element class="a b">
Portanto, apenas os elementos que possuem ambas as classes.
Quando uso $(".a, .b")
, me dá a união, mas quero o cruzamento.
Respostas:
Se você deseja combinar apenas elementos com ambas as classes (uma interseção, como um AND lógico), basta escrever os seletores juntos sem espaços no meio:
$('.a.b')
A ordem não é relevante, portanto você também pode trocar as classes:
$('.b.a')
Então, para combinar um div
elemento que possui um ID a
com as classes b
e c
, você deve escrever:
$('div#a.b.c')
(Na prática, é provável que você não precise obter esse específico, e um seletor de ID ou classe por si só costuma ser suficiente:. $('#a')
)
b
e c
são adicionados dinamicamente, e você só quer selecionar o elemento se ele tem essas classes.
.a .b
procura por elementos com classe b
descendentes de um elemento com classe a
. Então, algo como div a
retornará apenas a
elementos que estão dentro de um div
elemento.
Você pode fazer isso usando a filter()
função:
$(".a").filter(".b")
.a
e precisa filtrar várias vezes com base em diferentes classes arbitrárias que também pertencem ao .a
conjunto original .
Para o caso
<element class="a">
<element class="b c">
</element>
</element>
Você precisaria colocar um espaço entre .a
e.b.c
$('.a .b.c')
$('.a .c.b')
também funcionaria?
$('.a > element')
O problema que você está tendo é que você está usando a Group Selector
, enquanto que você deve usar a Multiples selector
! Para ser mais específico, você está usando $('.a, .b')
enquanto deveria estar $('.a.b')
.
Para obter mais informações, consulte a visão geral das diferentes maneiras de combinar os seletores abaixo!
Selecione todos os <h1>
elementos E todos os <p>
elementos E todos os <a>
elementos:
$('h1, p, a')
Selecione todos os <input>
elementos de type
text
, com classes code
e red
:
$('input[type="text"].code.red')
Selecione todos os <i>
elementos dentro dos <p>
elementos:
$('p i')
Selecione todos os <ul>
elementos que são filhos imediatos de um <li>
elemento:
$('li > ul')
Selecione todos os <a>
elementos que são colocados imediatamente após os <h2>
elementos:
$('h2 + a')
Selecione todos os <span>
elementos que são irmãos de <div>
elementos:
$('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>
Solução JavaScript Vanilla: -
document.querySelectorAll('.a.b')
Para um melhor desempenho, você pode usar
$('div.a.b')
Isso será exibido apenas através dos elementos div, em vez de percorrer todos os elementos html que você possui na sua página.
Seletor de grupo
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;}
Torna-se isso:
body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
Então, no seu caso, você tentou o seletor de grupo, enquanto é uma interseção
$(".a, .b")
em vez disso, use isso
$(".a.b")
Você pode usar o getElementsByClassName()
método para o que deseja.
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>
Esta é a solução mais rápida também. você pode ver uma referência sobre isso aqui .