jquery, selector de clase dentro de id


91

A continuación, ¿cómo debo seleccionar los elementos que contienen la clase my_classdentro del elemento con id = "my_id"?

Tenga en cuenta que el elemento también puede tener otra clase, que no estoy seleccionando.

<div id = "my_id">
    <span class = "my_class hidden">hi</span>
    <span class = "my_class">hello</span>
</div>

estaba intentando

$("#my_id [class*=my_class ]")

Respuestas:



48

Simplemente use el selector de clase simple.

$('#my_id .my_class')

No importa si el elemento también tiene otras clases. Tiene la clase .my_class , y está en algún lugar dentro de #my_id , por lo que coincidirá con ese selector.

Respecto al desempeño

De acuerdo con la documentación de rendimiento del selector de jQuery , es más rápido usar los dos selectores por separado, así:

$('#my_id').find('.my_class')

Aquí está la parte relevante de la documentación:

Selectores basados ​​en ID

// Fast:
$( "#container div.robotarm" );

// Super-fast:
$( "#container" ).find( "div.robotarm" );

El .find()enfoque es más rápido porque la primera selección se maneja sin pasar por el motor de selección de Sizzle; las selecciones de solo ID se manejan usando document.getElementById(), que es extremadamente rápido porque es nativo del navegador.

Seleccionar por ID o solo por clase (entre otras cosas) invoca funciones proporcionadas por el navegador document.getElementById()que son bastante rápidas, mientras que usar un selector descendente invoca el motor Sizzle como se mencionó que, aunque rápido, es más lento que la alternativa sugerida.



1

Creo que estás pidiendo seleccionar solo <span class = "my_class">hello</span>este elemento, tienes que hacer esto, si entiendo tu pregunta correctamente, esta es la respuesta,

$("#my_id [class='my_class']").addClass('test');

DEMO


$("#my_id .my_class")es el equivalente más corto; en este caso, no gana nada usando el selector de atributos.
doppelgreener

Espero que también haya hecho el mismo trabajo que tu respuesta, mientras respondo la pregunta que respondiste, no me he dado cuenta de que desde que respondí no he eliminado la pregunta.
Thirumalai murugan

1

También $( "#container" ).find( "div.robotarm" );
es igual a:$( "div.robotarm", "#container" )

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.