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?

Réponses:


138

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

$element1.is($element2)

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

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


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!


5

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


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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.