как сравнить два элемента в jQuery [дубликат]
этот вопрос уже есть ответ здесь:
Как я могу проверить, являются ли два элемента DOM, обернутые jQuery, одинаковыми? [дубликат]
3 ответы
var a=$('#start > div:last-child');
var b=$('#start > div.live')[0];
alert(a==b)
alert(a==$(b))
это всегда ложь. Как вы можете сравнить два элемента в jQuery?
спасибо
6 ответов:
вы можете сравнить элементы DOM. Помните, что jQuery селекторы возвращают массивы, которые никогда не будут равны в смысле равенства ссылок.
предположим:
<div id="a" class="a"></div>это:
$('div.a')[0] == $('div#a')[0]возвращает true.
для записи, jQuery имеет
is()
каждый раз при вызове функции jQuery () создается и возвращается новый объект. Таким образом, даже проверка равенства на одних и тех же селекторах потерпит неудачу.
<div id="a">test</div> $('#a') == $('#a') // falseрезультирующий объект jQuery содержит массив совпадающих элементов, которые в основном являются собственными объектами DOM, такими как
HTMLDivElementкоторые всегда ссылаются на один и тот же объект, поэтому вы должны проверить их на равенство, используя индекс массива, как предложил Дарин.$('#a')[0] == $('#a')[0] // true
a.is(b)и проверить, если они не равны используйте
!a.is(b)как
$b = $('#a') .... $('#a')[0] == $b[0] // not always trueвозможно класс добавлен в элемент или удален из него после первого присвоения
случайный AirCoded пример тестирования "set equality" в 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));
результаты сбора, которые вы получаете из коллекции jQuery, не поддерживают сравнение на основе набора. Вы можете использовать сравнение отдельных членов по одному, хотя для этого нет утилит, о которых я знаю в jQuery.
Comments