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
从 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 建议的数组索引检查这些对象是否相等。
HTMLDivElement
$('#a')[0] == $('#a')[0] // true
为了便于记录,jQuery 有一个 is()函数:
is()
a.is(b)
请注意,a已经是一个 jQuery 实例。
a
并检查他们是否不平等使用
!a.is(b)
至于
$b = $('#a') .... $('#a')[0] == $b[0] // not always true
类添加到元素中或者在第一次赋值后从元素中移除