bur*_*1ce 34 javascript jquery jquery-selectors
为什么标题中的等式是假的?如何检查两个jQuery选择器是否指向同一个DOM对象?
Bol*_*ock 57
您正在比较两个不同的 jQuery对象,因为您调用$()
两次(对于等式的每一侧一次),并且正如MooGoo解释的那样, jQuery每次调用它时都会创建新的包装器对象.这就是比较最终返回false的原因.
您可以通过使用get()
或数组解除引用从每个jQuery对象中提取DOM对象,然后比较这些元素.以下两者都返回true,因为两个相同的选择器匹配相同的body
DOM元素:
$('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
.
pet*_*azz 11
使用$ .is()
根据选择器,元素或jQuery对象检查当前匹配的元素集,
true
如果这些元素中至少有一个与给定的参数匹配,则返回 ...与其他过滤方法不同,
.is()
不会创建新的jQuery对象.相反,它允许您无需修改即可测试jQuery对象的内容.这在回调中通常很有用,例如事件处理程序......