如何比较jquery中的两个元素

时间:2010-03-09 09:18:13

标签: javascript jquery dom

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

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

感谢

6 个答案:

答案 0 :(得分:323)

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

a.is(b)

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

答案 1 :(得分:141)

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

假设:

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

这样:

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

返回true。

答案 2 :(得分:13)

每次调用jQuery()函数时,都会创建并返回一个新对象。因此,即使对相同选择器进行相等检查也会失败。

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

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

生成的jQuery对象包含一个匹配元素的数组,这些元素基本上是本地DOM对象,如HTMLDivElement,它们总是引用同一个对象,所以你应该使用数组索引来检查它们是否相同,如Darin建议的那样。 / p>

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

答案 3 :(得分:4)

a.is(b)

并检查它们是否平等使用

!a.is(b)

至于

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

可能在第一次分配后将类添加到元素中或从中删除

答案 4 :(得分:2)

在jQuery中测试“set equality”的随机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));

答案 5 :(得分:-1)

从jQuery集合返回的集合结果不支持基于集合的比较。你可以逐个比较各个成员,但是我没有在jQuery中知道这个实用程序。