有没有办法检查两个DOM元素是否相等?


68

通过位置和Javascript中元素的位置查找元素没有问题。但是有比较通用的方法吗?

我能想到的唯一方法是比较ID或类名,但并非所有元素都具有ID或类名。


1
那么,如果您的ID不一致,那么“等于”在您的上下文中是什么意思?元素类型相同吗?还是相同的内容?请扩大您的问题...
peirix

1
比较他们呢?高度,背景色,z索引?您想比较什么。
罗伯特2010年

你是什​​么意思“平等”?您是说两个变量指向同一个元素吗?或者您是说这两个元素“看起来相同”。如果是这样,则需要定义“看起来相同”的含义:相同的xy位置计数,相同的透明度/不透明计数,相同的文本内容吗?
slebetman 2010年

实际上,我想比较两个用户单击的元素是否相同。用户A单击一个元素,然后保存位置,ID,类,无论我希望用户如何比较它们。此元素上,然后用户B点击,我要检查,如果他同样的元素A.用户点击了
鲍勃

每个元素的ID属性都应该是唯一的,那么为什么不比较ID?
罗伯特2010年

Answers:


49

在现代浏览器中,有两种比较节点的方法。

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

b.isSameNode(a); //false

对于IE,它的DOM元素具有非标准属性uniqueID。但是我无法想象它在这种情况下会有用,因为是的,您实际上可以比较两个指针。


@Andru,哦,最近几年一切都在快速变化:)))
shabunc

2
isSameNode函数已被弃用,应isEqualNode改为使用。参见developer.mozilla.org/en-US/docs/Web/API/Node.isSameNode
idFlood 2014年

1
@idFlood不再正确
Spyryto

3
难道贬值过时?我们需要弄清楚我们的故事
vol7ron

2
FF似乎早已停止支持此方法。w3schools.com/jsref/met_node_issamenode.asp
BairDev

48

如果要比较两个元素指针是否相同,则只需使用比较运算符。这很容易证明,因为

document.body === document.body

例如,如果我以某种方式引用了两个我不知道的元素:

if (element1 === element2) ...

@ www139-为什么推荐?请提供证据
vsync


@ www139-当比较DOM节点时,第一链接没有有关DOM元素比较的信息,第二链接没有有关==vs的信息===。您能否仅举一个例子,而不是指向不相关的链接?
vsync

2
@ www139 -我知道的差异(JS做了12年之后),但我认为你的第一个评论是不恰当的,因为你“记得有人告诉你的地方。”没有彻底明白为什么它的事项以及如何与这个答案有关的问题似乎不专业。您仍然没有解释为什么您认为=====这种特定情况更好。
vsync

1
@vsync我认为您是正确的,很抱歉打扰阅读此讨论的人:)
www139
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.