如何比较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。