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

bur*_*1ce 34 javascript jquery jquery-selectors

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

Bol*_*ock 57

您正在比较两个不同的 jQuery对象,因为您调用$()两次(对于等式的每一侧一次),并且正如MooGoo解释的那样, jQuery每次调用它时都会创建新的包装器对象.这就是比较最终返回false的原因.

您可以通过使用get()或数组解除引用从每个jQuery对象中提取DOM对象,然后比较这些元素.以下两者都返回true,因为两个相同的选择器匹配相同的bodyDOM元素:

$('body').get(0) == $('body').get(0)
$('body')[0] == $('body')[0]
Run Code Online (Sandbox Code Playgroud)

如果要对jQuery选择器进行测试,请使用is().请注意,除非您的选择器相同,否则您使用的选择器可能不一定匹配相同的DOM元素(使用上面的选项仍然更好).这也会返回true:

$('body').is('body')
Run Code Online (Sandbox Code Playgroud)


Moo*_*Goo 35

因为jQuery为每个$调用创建一个新的包装器对象,并且在Javascript中所有对象都是不同的,即使它们具有完全相同的属性/方法.

另一方面,document.body == document.body会评估true.

  • 您是第一个解释包装器对象创建的人.+1 (3认同)

pet*_*azz 11

使用$ .is()

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

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

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