测试两个元素是否相同

时间:2009-08-13 03:43:32

标签: javascript jquery

我怀疑这首先要起作用:

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

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

7 个答案:

答案 0 :(得分:124)

从jquery 1.6开始,你现在可以做到:

$element1.is($element2)

答案 1 :(得分:74)

这应该有效:

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

所以这个

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

答案 2 :(得分:14)

或者只是

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

(没有新的jQuery实例; - )

答案 3 :(得分: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 :)

祝你好运!

答案 4 :(得分:5)

我会使用addClass()来标记打开,你可以轻松地检查它。

答案 5 :(得分:1)

9年后,没有jQuery

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

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

答案 6 :(得分:0)

像丝滑或桑蒂所说,一个独特的ID或类将是最容易测试的方法。你的if语句不能像你期望的那样工作的原因是因为它正在比较2个对象并查看它们是否是内存中的同一个对象。

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