【发布时间】:2011-05-18 01:01:26
【问题描述】:
为什么标题中的方程式是错误的?如何检查两个 jQuery 选择器是否指向同一个 DOM 对象?
【问题讨论】:
标签: javascript jquery jquery-selectors
为什么标题中的方程式是错误的?如何检查两个 jQuery 选择器是否指向同一个 DOM 对象?
【问题讨论】:
标签: javascript jquery jquery-selectors
您正在比较两个不同 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')
【讨论】:
function a() { return true; },那么a() == a() 是真的。
is 不会测试相等性,它会测试集合中是否至少有一个元素与给定的选择器匹配。例如$('#cb').is(':checked').
因为 jQuery 为每个 $ 调用创建一个新的包装对象,并且在 Javascript 中所有对象都是不同的,即使它们具有完全相同的属性/方法。
另一方面,document.body == document.body 的计算结果为 true。
【讨论】:
使用 $.is()
根据选择器、元素或 jQuery 对象检查当前匹配的元素集,如果这些元素中至少有一个与给定参数匹配,则返回
true...与其他过滤方法不同,
.is()不会创建新的 jQuery 对象。相反,它允许您在不修改的情况下测试 jQuery 对象的内容。这在回调中通常很有用,例如事件处理程序...
【讨论】: