测试两个元素是不是相同

Posted

技术标签:

【中文标题】测试两个元素是不是相同【英文标题】:Test if two elements are the same测试两个元素是否相同 【发布时间】:2010-11-19 04:30:30 【问题描述】:

一开始我会怀疑这是可行的:

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

但事实并非如此。如何测试元素是否相同?

【问题讨论】:

【参考方案1】:

从 jquery 1.6 开始,您现在可以简单地执行以下操作:

$element1.is($element2)

【讨论】:

这是所有最新版本的 Jquery 的最佳答案。 另一个我希望每次我在谷歌上搜索同一个问题并找到这个答案时都能投票赞成【参考方案2】:

这应该可行:

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

应该这样

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

【讨论】:

您的第二个示例不应该是 === 而不是 ==,以正确反映您的第一个示例吗? 这个答案在旧版本的jquery中可能是正确的,但大多数人使用的可能是支持$.is的版本【参考方案3】:

或者只是

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

(没有新的 jQuery 实例 ;-)

【讨论】:

【参考方案4】:

正如有人已经说过的,包裹在两个不同时刻的同一个 html 元素会生成两个不同的 jQuery 实例,因此它们永远不可能相等。

相反,包装的 HTML 元素可以这样比较,因为如果是同一个 HTML 元素,它们占用的内存位置是相同的,所以:

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

最好的问候!

【讨论】:

【参考方案5】:

我会使用 addClass() 来标记打开的,你可以很容易地检查。

【讨论】:

【参考方案6】:

9 年后,没有 jQuery

如果两个元素相同,则两个元素必须具有相同的指针。 因此,

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

【讨论】:

【参考方案7】:

就像 Silky 或 Santi 所说,唯一的 ID 或类将是最简单的测试方法。您的 if 语句不像您期望的那样工作的原因是因为它正在比较 2 个对象并查看它们是否是内存中的同一个对象。

因为 $(this) 总是创建一个新对象,所以它们永远不会相等。这就是为什么您必须测试对象的属性。如果每个 openActivity 元素都保证具有可以测试的不同内容,那么您就可以摆脱唯一的 id/class。

【讨论】:

以上是关于测试两个元素是不是相同的主要内容,如果未能解决你的问题,请参考以下文章

查找两个不同列表是不是包含完全相同元素的简单方法?

如何测试两个日期时间是不是相同? [复制]

在 Perl 中测试两个哈希键是不是具有相同的结构

测试两个`data.table`是不是指向相同的内存位置[重复]

比较两个list里是不是有相同的元素

java怎么比较两个list是不是相同?