82 votes

comment tester si deux éléments sont identiques

J'ai une liste d'éléments qui peuvent être caché/visible via JS soit en cliquant sur eux. Actuellement ouvertes élément est stocké dans une variable, openActivity. Un seul élément peut être ouvert à la fois. Je veux vérifier dans l'événement click() si les cliqué élément est le même que celui déjà ouvert, de sorte que ce n'est pas faire un double-animation de la fermeture et de l'ouverture. Je soupçonne que cela fonctionne dans un premier temps:

if (openActivity == $(this)) alert('hello');

Mais il ne le fait pas. J'ai noté cela ne fonctionne pas non plus:

if ($(this) == $(this)) alert('hello'); //never alert()s !

Voici toutes les plus pertinentes du code, si ça en vaut la peine pour vous (vous pouvez ne pas avoir à regarder ce):

openActivity = null;
$('.activityOuterContainer').click(function () {
    if (openActivity !== null) {
    	if (openActivity == $(this)) alert('hello');
    	activityExtra(openActivity).slideUp();
    	activityToggle(openActivity).css('background-position', '0 0');
    }
    openActivity = $(this);
    activityExtra(openActivity).slideDown();
    activityToggle(openActivity).css('background-position', '0 -20px');
});


function activityToggle(a) {
    return a.closest('.activityOuterContainer').find('.activityToggle');
}
function activityExtra(a) {
    return a.closest('.activityOuterContainer').find('.activityExtra');
}

Et l'un des éléments:

<div class="activityOuterContainer">
    <div class="activityContainer">
    	<div class="activityFormContainer">
    		name here
    		<div class="activityExtra">
    			<p>extra</p>
    		</div>
    	</div>
    	<div class="activityIsUsed">checkbox here</div>
    </div>
    <div class="activityToggle"></div>
</div>

127voto

cpac Points 508

A partir de la version 1.6, vous pouvez maintenant faire simplement:

 $element1.is($element2)
 

74voto

epascarello Points 71353

Cela devrait fonctionner:

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

donc cela devrait

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

14voto

Ou juste

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

(sans une nouvelle instance jQuery ;-)

12voto

Comme quelqu'un l'a déjà dit, le même élément HTML encapsulé à deux moments différents génère deux instances jQuery différentes, de sorte qu'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, ainsi:

 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!

5voto

Santi Points 2796

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X