Как сравнить два элемента в jquery

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

Это всегда неверно. Как вы можете сравнить два элемента в jQuery?

спасибо

Ответ 1

Вы можете сравнить элементы DOM. Помните, что селектора jQuery возвращают массивы, которые никогда не будут равны в смысле ссылочного равенства.

Предполагая, что:

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

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

возвращает true.

Ответ 2

Для записи jQuery имеет is() функцию:

a.is(b)

Обратите внимание, что a уже является экземпляром jQuery.

Ответ 3

Каждый раз, когда вы вызываете функцию jQuery(), создается и возвращается новый объект. Поэтому даже проверки равенства на тех же селекторах не будут выполнены.

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

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

Результирующий объект jQuery содержит массив совпадающих элементов, которые в основном являются собственными объектами DOM, такими как HTMLDivElement, которые всегда относятся к одному и тому же объекту, поэтому вы должны проверить их для равенства, используя индекс массива, как предложил Дарин.

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

Ответ 4

a.is(b)

и проверить, не равны ли они

!a.is(b)

как для

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

возможно, класс добавлен в элемент или удален из него после первого присваивания

Ответ 5

Случайный пример AirCoded тестирования "установить равенство" в jQuery:

$.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));

Ответ 6

Результаты коллекции, полученные вами из коллекции jQuery, не поддерживают сравнение на основе набора. Вы можете использовать сравнение отдельных членов один за другим, хотя для этого нет никаких утилит, о которых я знаю в jQuery.