Tester si deux éléments sont identiques

87

Je soupçonnerais que cela fonctionne au début:

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

Mais ce n'est pas le cas. Comment tester si les éléments sont les mêmes?

Jonas
la source

Réponses:

138

À partir de jquery 1.6, vous pouvez maintenant simplement faire:

$element1.is($element2)
Chrisarton
la source
7
C'est la meilleure réponse pour toutes les versions récentes de Jquery.
Chris Jaynes
Une autre que j'aimerais pouvoir voter pour chaque fois que je finis par chercher la même question sur Google et trouver cette réponse
freefaller
75

Cela devrait fonctionner:

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

ainsi devrait-il

if (openActivity[0] == $(this)[0]) alert('hello');
epascarello
la source
3
votre deuxième exemple ne devrait-il pas être === et non ==, pour refléter correctement votre premier exemple?
Prusprus
3
Cette réponse était peut-être juste dans les anciennes versions de jquery, mais la plupart des gens utilisent probablement une version qui prend en charge$.is
Chris Jaynes
14

Ou juste

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

(sans nouvelle instance jQuery ;-)

Francesco Terenzani
la source
12

Comme quelqu'un l'a déjà dit, le même élément HTML enveloppé dans deux moments différents génère deux instances jQuery différentes, donc elles ne peuvent jamais être égales.

Au lieu de cela, les éléments HTML encapsulés peuvent être comparés de cette façon, car l'emplacement de mémoire qu'ils occupent est le même s'il s'agit du même élément HTML, donc:

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

Meilleures salutations!

Yodabar
la source
5

J'utiliserais addClass () pour marquer l'ouverture et vous pouvez le vérifier facilement.

Santi
la source
3

9 ans plus tard, sans jQuery

Si deux éléments sont identiques, deux éléments doivent avoir le même pointeur. Donc,

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

Comme le dit Silky ou Santi, un identifiant ou une classe unique serait le moyen le plus simple de tester. La raison pour laquelle vos instructions if ne fonctionnent pas comme prévu est que cela compare 2 objets et voit s'ils sont le même objet en mémoire.

Comme il s'agit toujours d'un nouvel objet créé par $ (this), ils ne peuvent jamais s'égaliser. C'est pourquoi vous devez tester sur une propriété de l'objet. Vous pourriez vous en tirer sans identifiant / classe unique si chaque élément openActivity avait la garantie d'avoir un contenu différent que vous pourriez tester.

Tapoter
la source