how to compare two elements in jquery

var a=$('#start > div:last-child');
var b=$('#start > div.live')[0];
alert(a==b)
alert(a==$(b))

It's always false. How can you compare two elements in jQuery?

thanks

123034 次浏览

从 jQuery 集合返回的集合结果不支持基于集合的比较。您可以使用逐个比较单个成员,但是据我所知,在 jQuery 中没有这方面的实用程序。

您可以比较 DOM 元素。请记住,jQuery 选择器返回的数组在引用相等的意义上永远不会相等。

假设:

<div id="a" class="a"></div>

这个:

$('div.a')[0] == $('div#a')[0]

返回真。

在 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 ()函数时,都会创建并返回一个新对象。因此,即使对相同的选择器进行相等检查也会失败。

<div id="a">test</div>


$('#a') == $('#a') // false

生成的 jQuery 对象包含一个匹配元素的数组,这些元素基本上是本机 DOM 对象,比如总是引用同一个对象的 HTMLDivElement,因此您应该使用 Darin 建议的数组索引检查这些对象是否相等。

$('#a')[0] == $('#a')[0] // true

为了便于记录,jQuery 有一个 is()函数:

a.is(b)

请注意,a已经是一个 jQuery 实例。

a.is(b)

并检查他们是否不平等使用

!a.is(b)

至于

$b = $('#a')
....
$('#a')[0] == $b[0] // not always true

类添加到元素中或者在第一次赋值后从元素中移除