2010-11-30 13 views
33

¿Cómo es que la ecuación en el título es falsa? ¿Cómo verificar si dos selectores jQuery apuntan al mismo objeto DOM?

Respuesta

57

Usted está comparando dos objetos jQuery distintos, porque se llama a $() dos veces (una para cada lado de la ecuación), y as MooGoo explains jQuery crea nuevos objetos envolventes para cada vez que la llame. Es por eso que la comparación termina volviendo falso.

Puede extraer un objeto DOM de cada objeto jQuery usando get() o eliminación de referencias de matriz, luego compare estos elementos. La siguiente ambos devuelven cierto porque ambos selectores idénticos coinciden con el mismo elemento body DOM:

$('body').get(0) == $('body').get(0) 
$('body')[0] == $('body')[0] 

Si quieres poner a prueba contra un selector de jQuery, utilice is(). Tenga en cuenta que, a menos que los selectores sean idénticos, los selectores que use pueden no coincidir necesariamente con los mismos elementos DOM (es mejor utilizar los anteriores). Esto también devuelve verdadero:

$('body').is('body') 
+1

La primera oración solo está clara si ya sabes que la función $() crea objetos NUEVOS, por lo que la respuesta de MooGoo es un poco más explicativa. Si tengo 'function a() {return true; } ', entonces' a() == a() 'es verdadero. –

+0

@Jonathon: Tienes razón. Voy a aclarar mi respuesta también. – BoltClock

+1

En caso de que no esté claro anteriormente, 'is' no prueba la igualdad, prueba si al menos un elemento en el conjunto coincide con el selector dado. Ej '$ ('# cb'). Is (': checked')'. – Flash

11

Uso $ .is()

http://api.jquery.com/is/

comprobar la hora actual conjunto combinado de elementos contra un selector, elemento u objeto jQuery y regresar true si al menos uno de estos elementos coincide con el argumentos dados ...

A diferencia de otros métodos de filtrado, .is() no crea un nuevo objeto jQuery. En cambio, le permite probar el contenido de un objeto jQuery sin modificaciones. Esto es a menudo devoluciones de llamada dentro útiles, tales como controladores de eventos ...

+0

Consulte otras respuestas para obtener una explicación real de por qué necesita $ .is(). – pettazz

35

Debido jQuery crea un nuevo objeto de contenedor para cada $ llamada, y en Javascript todos los objetos son distintos, incluso si tienen exactamente los mismos métodos de propiedades/.

Por otro lado, document.body == document.body evaluaría a true.

+3

Usted fue el primero en explicar la creación del objeto contenedor. +1 –

+1

Sí, di mi voto por la misma razón. – BoltClock