Gibt es eine Möglichkeit zu überprüfen, ob zwei DOM-Elemente gleich sind?


68

Es ist kein Problem, ein Element anhand der Position und der Position eines Elements in Javascript zu finden. Aber gibt es allgemeine Möglichkeiten, sie zu vergleichen?

Ich kann mir nur vorstellen, IDs oder Klassennamen zu vergleichen, aber nicht alle Elemente haben IDs oder Klassennamen.


1
Was bedeutet "gleich" in Ihrem Kontext, wenn nicht dieselbe ID? Ist es der gleiche Elementtyp? Oder gleicher Inhalt? Bitte erweitern Sie Ihre Frage ein wenig ...
Peirix

1
Vergleichen Sie was mit ihnen? Höhe, Hintergrundfarbe, Z-Index? Was möchten Sie vergleichen?
Robert

Was meinst du mit "gleich"? Meinen Sie, wenn zwei Variablen auf dasselbe Element zeigen? Oder meinst du damit, dass die beiden Elemente "gleich aussehen"? Wenn ja, müssen Sie definieren, was es bedeutet, "gleich auszusehen": Zählt die gleiche xy-Position, zählt die gleiche Transparenz / Deckkraft, der gleiche Textinhalt?
Slebetman

Tatsächlich möchte ich vergleichen, ob es sich um dasselbe Element handelt, auf das zwei Benutzer klicken. Benutzer A klickt auf ein Element. Ich speichere Position, ID, Klasse und alles, was ich verwenden kann, um sie zu vergleichen. Dann klickt Benutzer B auf dieses Element und ich möchte überprüfen, ob er auf dasselbe Element wie Benutzer A geklickt hat.
Bob

Das ID-Attribut sollte für jedes Element eindeutig sein. Warum also nicht die ID vergleichen?
Robert

Antworten:


49

In modernen Browsern gibt es zwei Methoden zum Vergleichen von Knoten.

var a = document.createElement('div');
var b = document.createElement('div');
b.isEqualNode(a); // true

aber

b.isSameNode(a); //false

Und was den IE betrifft, so haben seine DOM-Elemente das Nicht-Standard-Attribut uniqueID . Aber ich kann mir nicht vorstellen, dass es in diesem Fall nützlich sein kann, da man tatsächlich zwei Zeiger vergleichen kann.


@ Andru, oh, alles ändert sich ziemlich schnell in den letzten Jahren :)))
Shabunc

2
Die isSameNodeFunktion ist veraltet. Sie sollten sie isEqualNodestattdessen verwenden. Siehe developer.mozilla.org/en-US/docs/Web/API/Node.isSameNode
idFlood

1
@idFlood nicht mehr wahr
Spyryto

3
Ist es abgeschrieben oder veraltet ? Wir müssen unsere Geschichten
klarstellen

2
FF scheint diese Methode vor einiger Zeit nicht mehr zu unterstützen. w3schools.com/jsref/met_node_issamenode.asp
BairDev

48

Wenn Sie zwei Elementzeiger vergleichen möchten, um dasselbe Element zu sein, verwenden Sie einfach den Vergleichsoperator. Dies kann leicht nachgewiesen werden, weil

document.body === document.body

Wenn ich zum Beispiel irgendwie Verweise auf zwei Elemente hatte, wusste ich es nicht:

if (element1 === element2) ...

@ www139 - warum wird es empfohlen? Bitte liefern Sie Beweise
vsync


@ www139 - Der erste Link enthält keine Informationen zum Vergleich von DOM-Elementen und der zweite Link enthält keine Informationen zu ==vs ===beim Vergleich von DOM-Knoten. Könnten Sie nicht einfach ein Beispiel geben, anstatt auf irrelevante Links zu verweisen?
vsync

2
@ www139 - Ich bin mir des Unterschieds bewusst (nachdem ich 12 Jahre lang JS gemacht habe), aber ich denke, dass Ihr erster Kommentar fehl am Platz war, da Sie sich "daran erinnern, dass jemand Ihnen irgendwo etwas erzählt hat ...", ohne genau zu verstehen, warum es wichtig ist und wie es im Zusammenhang mit dieser Antwort scheint unprofessionell. Sie haben immer noch nicht erklärt, warum Sie denken, dass ===es besser ist als ==in diesem speziellen Fall.
vsync

1
@vsync Ich denke, Sie sind richtig, tut mir leid, Leute zu stören, die diese Diskussion lesen :)
www139
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.