Testen Sie, ob zwei Elemente gleich sind

86

Ich würde vermuten, dass dies zunächst funktioniert:

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

Aber das tut es nicht. Wie testet man, ob Elemente gleich sind?

Jona
quelle

Antworten:

136

Ab jquery 1.6 können Sie jetzt einfach Folgendes tun:

$element1.is($element2)
Chrisarton
quelle
7
Dies ist die beste Antwort für alle aktuellen Versionen von Jquery.
Chris Jaynes
Eine andere, von der ich mir wünschte, ich könnte sie jedes Mal verbessern, wenn ich am Ende dieselbe Frage google und diese Antwort finde
Freifaller
75

Das sollte funktionieren:

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

so sollte das sein

if (openActivity[0] == $(this)[0]) alert('hello');
Epascarello
quelle
3
Sollte Ihr zweites Beispiel nicht === und nicht == sein, um Ihr erstes Beispiel richtig widerzuspiegeln?
Prusprus
3
Diese Antwort mag in älteren Versionen von jquery richtig gewesen sein, aber die meisten Leute verwenden wahrscheinlich eine Version, die unterstützt$.is
Chris Jaynes
14

Oder nur

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

(ohne neue jQuery-Instanz ;-)

Francesco Terenzani
quelle
12

Wie bereits jemand sagte, generiert dasselbe HTML-Element, das in zwei verschiedenen Momenten eingeschlossen ist, zwei verschiedene jQuery-Instanzen, sodass sie niemals gleich sein können.

Stattdessen können die umschlossenen HTML-Elemente auf diese Weise verglichen werden, da der von ihnen belegte Speicherplatz derselbe ist, wenn es sich um dasselbe HTML-Element handelt.

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

Freundliche Grüße!

Emanuele Del Grande
quelle
5

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

Santi
quelle
3

9 Jahre später ohne jQuery

Wenn zwei Elemente dasselbe sind, müssen zwei Elemente denselben Zeiger haben. So,

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

Wie seidig oder Santi sagte, wäre eine eindeutige ID oder Klasse der einfachste Weg, um zu testen. Der Grund dafür, dass Ihre if-Anweisungen nicht wie erwartet funktionieren, liegt darin, dass zwei Objekte verglichen werden und festgestellt wird, ob sie dasselbe Objekt im Speicher sind.

Da es sich immer um ein neues Objekt handelt, das von $ (this) erstellt wird, können sie sich niemals gleichen. Deshalb müssen Sie eine Eigenschaft des Objekts testen. Sie könnten ohne eindeutige ID / Klasse davonkommen, wenn für jedes openActivity-Element garantiert ein anderer Inhalt vorhanden wäre, gegen den Sie testen könnten.

Klopfen
quelle