Javascript 测试两个元素是否相同

Javascript 测试两个元素是否相同,javascript,jquery,Javascript,Jquery,起初我怀疑这是可行的: if ($('#element') == $('#element')) alert('hello'); 但事实并非如此。如何测试元素是否相同?我将使用addClass()标记打开的元素,您可以轻松地进行检查。如silky或Santi所说,唯一的ID或类将是最简单的测试方法。if语句不能像您预期的那样工作的原因是,它正在比较两个对象,并查看它们在内存中是否是相同的对象 由于$(this)总是创建一个新对象,因此它们永远不能相等。这就是为什么必须对对象的属性进行测试。如果每

起初我怀疑这是可行的:

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

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

我将使用addClass()标记打开的元素,您可以轻松地进行检查。

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

由于$(this)总是创建一个新对象,因此它们永远不能相等。这就是为什么必须对对象的属性进行测试。如果每个openActivity元素都保证有不同的内容供您测试,那么您就可以不使用唯一的id/类

这应该有效:

if ($(this)[0] === $(this)[0]) alert('hello');
这也应该如此

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

正如有人已经说过的,包装在两个不同时刻的相同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 :)
致以最良好的祝愿

或者只是

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

(没有新的jQuery实例;-)

从jQuery 1.6开始,您现在只需执行以下操作:

$element1.is($element2)

9年后,没有jQuery

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


你的第二个例子不应该是===而不是==,以正确地反映你的第一个例子吗?这个答案可能在较旧版本的jquery中是正确的,但是大多数人可能正在使用一个支持
$的版本。这是所有Jquery最新版本的最佳答案。另外一个我希望每次在谷歌上搜索同一个问题并找到答案时都能投上一票
document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false