Teste se dois elementos são iguais

87

Eu suspeito que isso funcione no início:

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

Mas não é assim. Como testar se os elementos são iguais?

Jonah
fonte

Respostas:

138

A partir do jquery 1.6 agora você pode simplesmente fazer:

$element1.is($element2)
Chrisarton
fonte
7
Esta é a melhor resposta para todas as versões recentes do Jquery.
Chris Jaynes
Outra que gostaria de poder votar a cada vez que acabo pesquisando a mesma pergunta no Google e encontrando esta resposta
freefaller
75

Isso deve funcionar:

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

então deveria

if (openActivity[0] == $(this)[0]) alert('hello');
Epascarello
fonte
3
seu segundo exemplo não deveria ser === e não ==, para espelhar corretamente seu primeiro exemplo?
Prusprus
3
Esta resposta pode estar certa em versões mais antigas do jquery, mas a maioria das pessoas provavelmente está usando uma versão que suporta$.is
Chris Jaynes
14

Ou apenas

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

(sem uma nova instância jQuery ;-)

Francesco Terenzani
fonte
12

Como alguém já disse, o mesmo elemento HTML envolto em dois momentos diferentes gera duas instâncias jQuery diferentes, portanto, elas nunca podem ser iguais.

Em vez disso, os elementos HTML agrupados podem ser comparados dessa forma, uma vez que o local da memória que ocupam é o mesmo se for o mesmo elemento HTML, portanto:

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

Cumprimentos!

Yodabar
fonte
5

Eu usaria addClass () para marcar o aberto e você pode verificar isso facilmente.

Santi
fonte
3

9 anos depois, sem jQuery

Se dois elementos são iguais, dois elementos devem ter o mesmo ponteiro. Portanto,

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

Como Silky ou Santi disse, um ID ou classe única seria a maneira mais fácil de testar. A razão pela qual suas instruções if não funcionam como você esperava é porque estão comparando 2 objetos e vendo se eles são o mesmo objeto na memória.

Como é sempre um novo objeto sendo criado por $ (this), eles nunca podem ser iguais. É por isso que você deve testar em uma propriedade do objeto. Você poderia se safar sem uma id / classe exclusiva se cada elemento openActivity tivesse a garantia de ter um conteúdo diferente para teste.

Pat
fonte