测试两个元素是不是相同
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。
【讨论】:
以上是关于测试两个元素是不是相同的主要内容,如果未能解决你的问题,请参考以下文章