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?
javascript
jquery
Jonas
la source
la source
Cela devrait fonctionner:
if ($(this)[0] === $(this)[0]) alert('hello');
ainsi devrait-il
if (openActivity[0] == $(this)[0]) alert('hello');
la source
$.is
Ou juste
if (openActivity[0] == this) alert('hello');
(sans nouvelle instance jQuery ;-)
la source
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!
la source
J'utiliserais addClass () pour marquer l'ouverture et vous pouvez le vérifier facilement.
la source
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
la source
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.
la source