Prueba si dos elementos son iguales

87

Sospecho que esto funciona al principio:

if ($('#element') == $('#element')) alert('hello');

Pero no es así. ¿Cómo se prueba si los elementos son iguales?

Jonás
fuente

Respuestas:

138

A partir de jquery 1.6 ahora puede simplemente hacer:

$element1.is($element2)
chrisarton
fuente
7
Esta es la mejor respuesta para todas las versiones recientes de Jquery.
Chris Jaynes
Otro por el que me gustaría poder votar cada vez que termino buscando en Google la misma pregunta y encontrando esta respuesta
freefaller
75

Esto debería funcionar:

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

entonces debería esto

if (openActivity[0] == $(this)[0]) alert('hello');
epascarello
fuente
3
¿No debería ser su segundo ejemplo === y no ==, 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 las personas probablemente estén usando una versión compatible$.is
Chris Jaynes
14

O solo

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

(sin una nueva instancia de jQuery ;-)

Francesco Terenzani
fuente
12

Como alguien ya dijo, el mismo elemento HTML envuelto en dos momentos diferentes genera dos instancias jQuery diferentes, por lo que nunca pueden ser iguales.

En cambio, los elementos HTML envueltos se pueden comparar de esa manera, ya que la ubicación de memoria que ocupan es la misma si es el mismo elemento HTML, entonces:

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 :)

¡Atentamente!

yodabar
fuente
5

Usaría addClass () para marcar lo abierto y puedes verificarlo fácilmente.

Santi
fuente
3

9 años después, sin jQuery

Si dos elementos son el mismo, dos elementos deben tener el mismo puntero. Así,

document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false
allenhwkim
fuente
0

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

Dado que $ (this) siempre crea un nuevo objeto, nunca pueden igualarse entre sí. Es por eso que debe probar una propiedad del objeto. Podría salirse con la suya sin una identificación / clase única si cada elemento de openActivity tuviera la garantía de tener un contenido diferente con el que podría probar.

Palmadita
fuente