【发布时间】:2011-01-25 08:31:55
【问题描述】:
var a=$('#start > div:last-child');
var b=$('#start > div.live')[0];
alert(a==b)
alert(a==$(b))
它总是错误的。如何比较 jQuery 中的两个元素?
谢谢
【问题讨论】:
-
@e-motiv 的回答应该是被接受的
标签: javascript jquery dom
var a=$('#start > div:last-child');
var b=$('#start > div.live')[0];
alert(a==b)
alert(a==$(b))
它总是错误的。如何比较 jQuery 中的两个元素?
谢谢
【问题讨论】:
标签: javascript jquery dom
【讨论】:
$(event.target).is($("#a"))
is() 是一个jQuery API function 更清楚。
您可以比较 DOM 元素。请记住,jQuery 选择器返回的数组在引用相等的意义上永远不会相等。
假设:
<div id="a" class="a"></div>
这个:
$('div.a')[0] == $('div#a')[0]
返回真。
【讨论】:
.selector 属性的差异,我很确定它不会返回true。
true。
.get() 相同,而不是.eq()。它们非常不同。
每次调用 jQuery() 函数时,都会创建并返回一个新对象。所以即使是对同一个选择器的相等检查也会失败。
<div id="a">test</div>
$('#a') == $('#a') // false
生成的 jQuery 对象包含一个匹配元素数组,这些元素基本上是原生 DOM 对象,例如 HTMLDivElement,它们始终引用同一个对象,因此您应该按照 Darin 的建议使用数组索引检查它们是否相等。
$('#a')[0] == $('#a')[0] // true
【讨论】:
== 两个 jQuery 对象进行比较
a.is(b)
并检查它们是否不相等使用
!a.is(b)
至于
$b = $('#a')
....
$('#a')[0] == $b[0] // not always true
可能在第一次赋值后添加到元素或从元素中删除类
【讨论】:
在 jQuery 中测试“设置相等性”的随机 AirCoded 示例:
$.fn.isEqual = function($otherSet) {
if (this === $otherSet) return true;
if (this.length != $otherSet.length) return false;
var ret = true;
this.each(function(idx) {
if (this !== $otherSet[idx]) {
ret = false; return false;
}
});
return ret;
};
var a=$('#start > div:last-child');
var b=$('#start > div.live')[0];
console.log($(b).isEqual(a));
【讨论】:
您从 jQuery 集合返回的集合结果不支持基于集合的比较。您可以一一比较各个成员,我知道在 jQuery 中没有这方面的实用程序。
【讨论】: