Quiero seleccionar todos los elementos que tienen las dos clases a
y b
.
<element class="a b">
Entonces, solo los elementos que tienen ambas clases.
Cuando lo uso $(".a, .b")
me da la unión, pero quiero la intersección.
Quiero seleccionar todos los elementos que tienen las dos clases a
y b
.
<element class="a b">
Entonces, solo los elementos que tienen ambas clases.
Cuando lo uso $(".a, .b")
me da la unión, pero quiero la intersección.
Respuestas:
Si desea hacer coincidir solo elementos con ambas clases (una intersección, como un AND lógico), simplemente escriba los selectores juntos sin espacios entre ellos:
$('.a.b')
El orden no es relevante, por lo que también puede intercambiar las clases:
$('.b.a')
Entonces, para hacer coincidir un div
elemento que tiene un ID a
con clases b
y c
, escribiría:
$('div#a.b.c')
(En la práctica, lo más probable es que no necesite ser tan específico, y un ID o un selector de clase por sí solo suele ser suficiente:. $('#a')
)
b
y c
se agregan dinámicamente, y solo desea seleccionar el elemento si tiene esas clases.
.a .b
busca elementos con clase b
que son descendientes de un elemento con clase a
. Entonces, algo así div a
solo devolverá a
elementos que están dentro de un div
elemento.
Puedes hacer esto usando la filter()
función:
$(".a").filter(".b")
.a
's' y necesita filtrar varias veces diferentes clases arbitrarias basadas que también pertenecen al .a
conjunto original .
Para el caso
<element class="a">
<element class="b c">
</element>
</element>
Tendría que poner un espacio entre .a
y.b.c
$('.a .b.c')
$('.a .c.b')
funcionaría también el selector ?
$('.a > element')
El problema que tienes es que estás usando a Group Selector
, ¡mientras que deberías estar usando a Multiples selector
! Para ser más específico, está usando $('.a, .b')
mientras que debería estar usando $('.a.b')
.
Para obtener más información, consulte la descripción general de las diferentes formas de combinar selectores a continuación.
Seleccione todos los <h1>
elementos Y todos los <p>
elementos Y todos los <a>
elementos:
$('h1, p, a')
Seleccione todos los <input>
elementos de type
text
, con clases code
y red
:
$('input[type="text"].code.red')
Seleccione todos los <i>
elementos dentro de los <p>
elementos:
$('p i')
Seleccione todos los <ul>
elementos que son hijos inmediatos de un <li>
elemento:
$('li > ul')
Seleccione todos los <a>
elementos que se colocan inmediatamente después de los <h2>
elementos:
$('h2 + a')
Seleccione todos los <span>
elementos que son hermanos 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>
Solución JavaScript de vainilla: -
document.querySelectorAll('.a.b')
Para un mejor rendimiento puedes usar
$('div.a.b')
Esto solo se verá a través de los elementos div en lugar de recorrer todos los elementos html que tiene en su página.
Selector 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;}
Se convierte en esto:
body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
Entonces, en su caso, ha probado el selector de grupo mientras que es una intersección
$(".a, .b")
en su lugar usa esto
$(".a.b")
Puedes usar el getElementsByClassName()
método para lo que quieras.
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 es la solución más rápida también. Puedes ver un punto de referencia sobre eso aquí .