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?

Respostas:


138

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

$element1.is($element2)

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');

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


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!


5

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


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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.