2009-02-27 13 views
14

Digamos que tengo un elemento DOM. ¿Cómo puedo saber si coincide con un selector jQuery, como p o .myclass? Es fácil usar el selector para unir los elementos del elemento, pero quiero una respuesta verdadera/falsa a si este elemento en particular coincide?¿Cómo puedo saber si un elemento coincide con un selector?

El elemento puede no tener un ID (y no puedo asignarlo al azar por razones que van más allá), así que no puedo aplicar mi selector al elemento primario del elemento y buscar niños con el mismo ID que el mío .

¿Funcionará como se esperaba? No puedo entender las comparaciones de objetos Javascript.

$(selector, myElement.parentNode).each({ 
    if (this == myElement) // Found it 
}); 

parece que no habría una manera fácil de ver si un elemento DOM coincide con un selector de jQuery ...

+0

duplicado de - https://stackoverflow.com/q/3304638/104380 – vsync

Respuesta

32

Puede utilizar el método is():

if($(this).is("p")){ 
// ... 
} 
+1

pero lo hace trabajar así? '$ (this) .is (" body .content p ")' -Necesitaría algo como esto – Luke

+0

¿Por qué no ejecutar el selector primero, luego probar si el elemento está en el resultado ... – jahroy

+0

@Luke Funciona como eso si. –

3

Creo que el is() método es lo que estás buscando.

De lo contrario, puede intentar seleccionar el elemento directamente, si eso es lo que quiere decir.

Por lo tanto si se trata de una "a" con una clase de "miclase", acaba de hacer $ ("a.myclass")

1

no puedo aplicar mi selector para el padre del elemento y buscar niños con la misma identificación que la mía.

No se puede hacer eso de todos modos: el atributo id debe ser exclusivo.

0

tal vez sólo quiere:

$(".complicated #selector p.with > div.manyParts").length 

Si no hay coincidencias, longitud devuelve 0, que es Falsy, para que pueda utilizarlo en una declaración if, como:

if($(".doesThis #exist").length) { 
    // Do things 
} 

Probablemente Vale la pena almacenarlo en una variable separada y ENTONCES verificar la longitud; De esta manera, si necesita hacer algo con los elementos coincidentes, no tiene que ejecutar el mismo selector nuevamente.

0

Sin jQuery, utilizando Element.matches():

// lets define 2 variables pointing to ordinary <div> elements 
 
var elm1 = document.querySelector('div'); 
 
var elm2 = elm1.nextElementSibling; 
 

 
console.log(
 
    elm1.matches('.foo'),   // true 
 
    elm1.matches('.bar'),   // false 
 
    elm2.matches('[title=bar]'), // true 
 
)
<div class='foo'></div> 
 
<div title='bar'></div>


See supported browsers list

Cuestiones relacionadas