为什么$(“body”)== $(“body”)返回false?

时间:2010-11-30 17:58:23

标签: javascript jquery jquery-selectors

为什么标题中的等式是假的?如何检查两个jQuery选择器是否指向同一个DOM对象?

3 个答案:

答案 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()

http://api.jquery.com/is/

  

根据选择器,元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定的参数匹配,则返回true ...

     

与其他过滤方法不同,.is()不会创建新的jQuery对象。相反,它允许您无需修改​​即可测试jQuery对象的内容。这在回调中通常很有用,例如事件处理程序......