为什么elementA === elementB产生的结果与elementB.isEqualNode(elementA)不同?

检查答案后是否有办法检查两个DOM元素是否相等? 我正在尝试使用===检查javascript中的两个元素是否相等。 令人惊讶的是,当元素AB相同时A === B返回falseB.isEqualNode(A)返回true

这是一个例子:

HTML:

<div>   
   <h1>Test</h1>
</div>

JavaScript的:

var inMemoryDiv = document.createElement('div');
var inMemoryH1 = document.createElement('h1');
inMemoryH1.innerHTML = "Test";
inMemoryDiv.appendChild(inMemoryH1);

var h1 = document.getElementsByTagName('h1')[0];
alert(h1 === inMemoryH1); // false
alert(inMemoryH1.isEqualNode(h1)); // true
alert(h1.innerHTML === inMemoryH1.innerHTML); // true

复制在一个小提琴

为什么会这样?

===============>>#1 票数:5

isEqualNodeDOM Level 3中定义,因此:

此方法测试节点的相等性, 而不是相同性 (即,两个节点是否是对同一对象的引用),可以使用Node.isSameNode()进行测试。 所有相同的节点也是相同的,但反过来可能不正确。

当且仅当满足以下条件时,两个节点相等:

  • 这两个节点属于同一类型。
  • 以下字符串属性相同:nodeName,localName,namespaceURI,prefix,nodeValue。 这是:它们都是null,或者它们具有相同的长度并且是字符相同的字符。
  • NamedNodeMaps属性相等。 这是:它们都是空的,或者它们具有相同的长度,并且对于存在于一个映射中的每个节点,存在另一个映射中存在且相等的节点,但不一定在同一索引处。
  • childNodes NodeLists是相同的。 这是:它们都是null,或者它们具有相同的长度并且在相同的索引处包含相等的节点。 注意,规范化会影响平等; 为避免这种情况,应在比较之前对节点进行规范化。

===============>>#2 票数:1 已采纳

您创建一个新元素。 这与现有的不同。 它们是平等的,因为它们具有相同的结构和内容。 如果它们包含相同的文本,则两个字符串对象相同,但如果单独创建它们则不相同。

这是一个更简单的案例:

var div1 = document.createElement('div');
var div2 = document.createElement('div');
alert(div1 === div2); // false
alert(div1.isEqualNode(div2)); // true

  ask by agconti translate from so

未解决问题?本站智能推荐:

2回复

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

在Javascript中按位置和元素的位置查找元素没有问题。 但是有比较它们的一般方法吗? 我能想到的唯一方法是比较id或类名,但并非所有元素都有id或类名。
3回复

检查JavaScript中两个数组的值是否相同/相等的最佳方法

检查两个数组在JavaScript中是否具有相同/相等值(以任何顺序)的最佳方法是什么? 这些值只是数据库实体的主键,因此它们总是会有所不同 const result = [1, 3, 8, 77] const same = [8, 3, 1, 77] const diff = [8,
3回复

如何检查JavaScript中两对数字是否相等

我是JavaScript的新手,我想知道如何比较两对数字。 我有两个数组,数组中的每个元素都是成对格式。 例如,我使用以下格式的数组: 对于每个数组。 现在,如何比较这两个数组的每个元素是否相等? 我尝试了检查它们是否相等的常规方法: 他们似乎不起作用。 有人可以建议一
16回复

如何用JavaScript检查两个数组是否相等? [复制]

这个问题已经在这里有了答案: 如何在JavaScript中比较数组? (67个答案) 4年前关闭。
1回复

如何检查javaScript中多维数组中两个元素是否并排

我将直接指出问题。.因此,我创建了一个多维数组,我将其像这样: 关于cellObj,我是这样创建的: 现在我已完成所有设置,我将在多维数组中生成两个图像,如下所示: 两个图像可以在同一行或同一列中,并且它们之间有一个空单元格,但是我不希望它们在水平或垂直方向上并排放置。
2回复

如何检查香草JavaScript中两个元素是否相交? [重复]

这个问题已经在这里有了答案: jQuery / JavaScript冲突检测 6个答案 我有这样的代码: $(function() { var $selection = $('.selection'); $('li').filter(function
1回复

比较数组中的两个数字,以查看它们在javascript中是否相等

因此,我正在创建一个匹配的游戏,这是我的点击监听器: 因此,当单击等于2并调用twoClicked()函数时,将运行以下代码: 如果我警告x或y,则返回-1,为什么它没有为我提供我单击的两个框的值。 这里检查出的游戏 ,如果你想的完整代码检查出来这里
4回复

检查字符串的两端是否在javascript中相等

我想编写一个函数来测试是否颠倒了诸如“(())”或“ << >>”之类的字符串是否相等。 像“(((()”) 有这样的名字吗? 我认为这是一种常见的算法。 出于某种原因,反向将其拆分为数组后,对它没有任何作用? function ifEqu
2回复

如何检查Java中两个json对象是否相等? [重复]

这个问题已经在这里有了答案: 测试两个JSON对象是否相等,而忽略Java 22中的 子顺序 我有两个较大的嵌套json objects ,需要进行相等性比较。 我按照以下步骤操作,但失败了。 我将json对象转换为树图,并将json数组转换为哈希集
2回复

使用===检查两个值是否有意义地相等,不适用于javascript

我想使用JavaScript检查两个值是否有意义地相等,但是单击按钮时它不起作用。 以下是我的尝试 仅当两个值相等时才如何执行if块。