如何比较jQuery中的两个元素

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

这总是假的。 你如何比较jQuery中的两个元素?

谢谢

你可以比较DOM元素。 请记住,jQueryselect器返回的数组在参考平等意义上永远不会相等。

假设:

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

这个:

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

返回true。

为了logging,jQuery有一个is()函数:

 a.is(b) 

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

每次调用jQuery()函数时,都会创build并返回一个新对象。 所以即使在相同的select器上进行平等检查也会失败。

 <div id="a">test</div> $('#a') == $('#a') // false 

由此产生的jQuery对象包含一个匹配元素的数组,这些元素基本上是像HTMLDivElement这样的始终引用同一个对象的本地DOM对象,所以您应该像Darin所build议的那样使用数组索引检查它们是否相等。

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

在jQuery中testing“set equal”的随机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)); 
 a.is(b) 

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

 !a.is(b) 

至于

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

可能是class被添加到元素中,或者在第一次分配后被删除

您从jQuery集合中获得的集合结果不支持基于集合的比较。 虽然你可以逐个比较个别成员,但是在jQuery中我并不知道这个function。