测试两个元素是否相同


87

我怀疑这起初会起作用:

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

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

Answers:



75

这应该工作:

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

所以应该这样

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

3
您的第二个示例应该不是===而不是==,以正确反映您的第一个示例?
Prusprus 2013年

3
这个答案可能是正确的在老版本的jQuery的,但大多数人可能使用一个版本支持$.is
克里斯·杰恩斯


12

就像有人已经说过的那样,包裹在两个不同时刻的同一个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()标记已打开,您可以轻松地对其进行检查。


3

9年后,没有jQuery

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

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

0

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

由于它始终是由$(this)创建的新对象,因此它们永远不会彼此相等。这就是为什么您必须测试对象的属性的原因。如果保证每个openActivity元素都具有可以测试的不同内容,那么您就可以没有唯一的ID /类。

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.