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.

Bob
quelle
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.

shabunc
quelle
@ 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) ...
Delan Azabani
quelle
@ www139 - warum wird es empfohlen? Bitte liefern Sie Beweise
vsync
@vsync werfen Sie einen Blick auf diese Frage stackoverflow.com/questions/359494/… und stackoverflow.com/questions/10679762/…
www139
@ 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