2009-08-13 18 views
74

sind, würde ich vermuten, dass dieses zunächst arbeiten:Prüft, ob zwei Elemente die gleichen

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

Aber es funktioniert nicht. Wie prüft man, ob Elemente gleich sind?

Antwort

101

Ab jquery 1.6 können Sie jetzt einfach tun:

$element1.is($element2) 
+7

Dies ist die beste Antwort für alle neuen Versionen von Jquery. –

+0

Eine weitere, die ich wünschte, ich könnte für jedes Mal upvoote ich am Ende googlen die gleiche Frage und diese Antwort finden – freefaller

5

Ich würde addClass() zum Markieren der geöffneten verwenden und Sie können das leicht überprüfen.

0

Wie Silky oder Santi sagte, eine eindeutige ID oder Klasse wäre der einfachste Weg zu testen. Der Grund, warum Ihre if-Anweisungen nicht so funktionieren, wie Sie es erwarten würden, ist, dass sie zwei Objekte vergleicht und sieht, ob sie dasselbe Objekt im Speicher sind.

Da es immer ein neues Objekt ist, das von $ (this) erzeugt wird, können sie niemals gleich sein. Deshalb müssen Sie eine Eigenschaft des Objekts testen. Sie könnten ohne eindeutige ID/Klasse auskommen, wenn jedes openActivity-Element garantiert einen anderen Inhalt hätte, gegen den Sie testen könnten.

73

Dies sollte funktionieren:

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

sollte so diese

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

sollte Ihr zweites Beispiel nicht sein = == und nicht ==, um dein erstes Beispiel richtig zu spiegeln? – Prusprus

+3

Diese Antwort könnte in älteren Versionen von jquery stimmen, aber die meisten Leute verwenden wahrscheinlich eine Version, die '$ .is' unterstützt. –

12

Als jemand schon gesagt, das gleiche in zwei verschiedenen Momenten gewickelt HTML-Element erzeugt zwei verschiedene Instanzen jQuery, so dass sie nie sein gleich.

Stattdessen wickelten die HTML-Elemente auf diese Weise verglichen werden können, da die Speicherplatz sie belegen das gleiche ist, wenn sie das gleiche HTML-Element ist, so:

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

Mit freundlichen Grüßen!

14

Oder nur

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

(ohne eine neue jQuery Instanz ;-)

Verwandte Themen