【发布时间】:2010-11-19 04:30:30
【问题描述】:
一开始我会怀疑这是可行的:
if ($('#element') == $('#element')) alert('hello');
但事实并非如此。如何测试元素是否相同?
【问题讨论】:
标签: javascript jquery
一开始我会怀疑这是可行的:
if ($('#element') == $('#element')) alert('hello');
但事实并非如此。如何测试元素是否相同?
【问题讨论】:
标签: javascript jquery
从 jquery 1.6 开始,您现在可以简单地执行以下操作:
$element1.is($element2)
【讨论】:
这应该可行:
if ($(this)[0] === $(this)[0]) alert('hello');
应该这样
if (openActivity[0] == $(this)[0]) alert('hello');
【讨论】:
$.is的版本
或者只是
if (openActivity[0] == this) alert('hello');
(没有新的 jQuery 实例 ;-)
【讨论】:
正如有人已经说过的,包裹在两个不同时刻的同一个 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 :)
最好的问候!
【讨论】:
我会使用 addClass() 来标记打开的,你可以很容易地检查。
【讨论】:
9 年后,没有 jQuery
如果两个元素相同,则两个元素必须具有相同的指针。 因此,
document.body === document.body // true
document.querySelector('div') === document.querySelector('div') // true
document.createElement('div') === document.createElement('div') // false
【讨论】:
就像 Silky 或 Santi 所说,唯一的 ID 或类将是最简单的测试方法。您的 if 语句不像您期望的那样工作的原因是因为它正在比较 2 个对象并查看它们是否是内存中的同一个对象。
因为 $(this) 总是创建一个新对象,所以它们永远不会相等。这就是为什么您必须测试对象的属性。如果每个 openActivity 元素都保证具有可以测试的不同内容,那么您就可以摆脱唯一的 id/class。
【讨论】: