Quiero seleccionar todos los elementos que tienen las dos clases ay 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 ay 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 divelemento que tiene un ID acon clases by 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'))
by cse agregan dinámicamente, y solo desea seleccionar el elemento si tiene esas clases.
.a .bbusca elementos con clase bque son descendientes de un elemento con clase a. Entonces, algo así div asolo devolverá aelementos que están dentro de un divelemento.
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 .aconjunto original .
Para el caso
<element class="a">
<element class="b c">
</element>
</element>
Tendría que poner un espacio entre .ay.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 codey 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í .