2009-08-13 16 views

Respuesta

101

A partir de jQuery 1.6 ahora se puede simplemente hacer:

$element1.is($element2) 
+7

Esta es la mejor respuesta para todas las versiones recientes de Jquery. –

+0

Otra que me gustaría poder votar cada vez que termino buscando en Google la misma pregunta y encontrando esta respuesta – freefaller

5

Yo usaría addClass() para marcar el abierto y puede verificarlo fácilmente.

0

Como dijo sedoso o Santi, una ID o clase única sería la forma más fácil de probar. La razón por la que tus declaraciones if no funcionan como esperarías es porque está comparando 2 objetos y viendo si son el mismo objeto en la memoria.

Dado que siempre es un objeto nuevo creado por $ (esto), nunca pueden igualarse entre sí. Es por eso que tienes que probar en una propiedad del objeto. Podrías salirte con la única identificación/clase única si se garantizara que cada elemento de openActivity tuviera contenido diferente contra el que podrías poner a prueba.

73

Esto debería funcionar:

if ($(this)[0] === $(this)[0]) alert('hello'); 

así que si esta

if (openActivity[0] == $(this)[0]) alert('hello'); 
+3

no debe ser su segundo ejemplo = == y not ==, para reflejar correctamente su primer ejemplo? – Prusprus

+3

Esta respuesta podría haber sido correcta en versiones anteriores de jquery, pero la mayoría de la gente probablemente esté usando una versión que admita '$ .is' –

12

Como alguien ya dijo, el mismo elemento HTML envuelto en dos momentos diferentes genera dos casos jQuery diferentes, por lo que nunca puede ser igual.

En cambio, los elementos HTML envueltos puede compararse esa manera, ya que la posición de memoria que ocupan es lo mismo si se trata del mismo elemento HTML, por lo que:

var LIs = $('#myUL LI'); 
var $match = $('#myUL').find('LI:first'); 

alert(LIs.eq(0) === $match); // false 
alert(LIs.get(0) === $match.get(0)) // TRUE! yeah :) 

Saludos!

14

O simplemente

if (openActivity[0] == this) alert('hello'); 

(sin una nueva instancia de jQuery ;-)

Cuestiones relacionadas