2011-09-28 10 views
24

Así que estoy trabajando en algo que no estaba bien pensado en la construcción del equipo de back-end. Eso me deja con un documento lleno de divs.jQuery encontrar elemento por clase específica cuando el elemento tiene múltiples clases

Lo que estoy haciendo es retroceder desde el elemento que necesito hacer clic en, obtener el contenedor principal y luego encontrar un elemento dentro del principal que tiene class="alert-box warn", class="alert-box dead", etc. ... Esencialmente, estoy tratando de usar múltiples selectores de clase en cada elemento. Cuando trato de encontrar solo alert-box, parece que no funciona bien. Estoy asumiendo porque tiene warn, muerto, `` bien, etc.

¿Cómo puedo encontrar solo alert-box* o equivalente a un concepto de comodín?

+2

¿Se puede publicar una muestra de su marcado HTML? –

Respuesta

52

Puede combinar selectores como esto

$(".alert-box.warn, .alert-box.dead"); 

O si quieres un comodín utilizar el attribute-contains selector

$("[class*='alert-box']"); 

Nota: De preferencia que se sabe el tipo de elemento o etiqueta cuando se utilizan los selectores arriba. Conocer la etiqueta puede hacer que el selector sea más eficiente.

$("div.alert-box.warn, div.alert-box.dead"); 
$("div[class*='alert-box']"); 
+0

Recomendaría el primer selector sobre el último. – Bojangles

+1

También puede sustituir el * = por^= si está interesado en asegurarse de que la clase del elemento "comience con" el cuadro de alerta en lugar de solo "contener" el cuadro de alerta. –

+0

Me acaba de publicar un ejemplo jsFiddle https://jsfiddle.net/frxyqzw3/2/ mostrando la clase * idea – shadi

2

Un elemento puede tener cualquier número de nombres de clases, sin embargo, sólo puede tener un atributo de clase; solo el primero será leído por jQuery.

Usando el código publicado, $(".alert-box.warn") funcionará, pero $(".alert-box.dead") no lo hará.

+0

Sólo la primera clase '= "" atributo' será leído por el navegador, por no hablar de jQuery. – Bojangles

+0

Ese es el punto que quería transmitir con esta respuesta, ¿no es lo suficientemente claro? –

+0

Solo quería aclarar que jQuery en realidad no verá más 'class =" "' debido a que el analizador HTML del navegador los ignora. – Bojangles

-1

que busca http://api.jquery.com/hasClass/

<div id="mydiv" class="foo bar"></div> 

$('#mydiv').hasClass('foo') //returns ture 
+4

No, no lo es, quiere seleccionar elementos según la clase que tenga, no para ver si un elemento que tiene tiene una clase o no. – Bojangles

3
var divs = $("div[class*='alert-box']"); 
7

Puede seleccionar elementos con múltiples clases de este modo:

$("element.firstClass.anotherClass"); 

Simplemente encadenar a la clase siguiente a la primera, sin una espacio (espacios significa "hijos de").

Cuestiones relacionadas