为什么标题中的等式是假的?如何检查两个jQuery选择器是否指向同一个DOM对象?
答案 0 :(得分:57)
您正在比较两个不同的 jQuery对象,因为您调用$()
两次(对于等式的每一侧一次),as MooGoo explains jQuery每次都会创建新的包装器对象你叫它。这就是为什么比较最终会返回false。
您可以使用get()
或数组解除引用从每个jQuery对象中提取DOM对象,然后比较这些元素。以下两者都返回true,因为两个相同的选择器匹配相同的body
DOM元素:
$('body').get(0) == $('body').get(0)
$('body')[0] == $('body')[0]
如果要针对jQuery选择器进行测试,请使用is()
。请注意,除非您的选择器相同,否则您使用的选择器可能不一定匹配相同的DOM元素(使用上面的选项仍然更好)。这也会返回true:
$('body').is('body')
答案 1 :(得分:35)
因为jQuery为每个$
调用创建一个新的包装器对象,并且在Javascript中所有对象都是不同的,即使它们具有完全相同的属性/方法。
另一方面,document.body == document.body
会评估为true
。
答案 2 :(得分:11)
使用$ .is()
根据选择器,元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定的参数匹配,则返回
true
...与其他过滤方法不同,
.is()
不会创建新的jQuery对象。相反,它允许您无需修改即可测试jQuery对象的内容。这在回调中通常很有用,例如事件处理程序......