Вы можете сравнивать элементы DOM. Помните, что селекторы jQuery возвращают массивы, которые никогда не будут равны в смысле ссылочного равенства.
Предполагая:
<div id="a" class="a"></div>
this:
$('div.a')[0] == $('div#a')[0]
возвращает истину.
Случайный пример 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));
Каждый раз, когда вы вызываете функцию jQuery (), создается и возвращается новый объект. Таким образом, даже проверка равенства для одних и тех же селекторов не удастся.
<div id="a">test</div>
$('#a') == $('#a') // false
Результирующий объект jQuery содержит массив совпадающих элементов, которые в основном являются собственными объектами DOM, такими как HTMLDivElement
, которые всегда ссылаются на один и тот же объект, поэтому вы должны проверить их на равенство, используя индекс массива, как предложил Дарин. .
$('#a')[0] == $('#a')[0] // true
Результаты сбора, которые вы получаете из коллекции jQuery, не поддерживают сравнение на основе наборов. Вы можете использовать для сравнения отдельных членов один за другим, хотя я не знаю утилит для этого в jQuery.