Мне нужно сравнить, если разные селекторы возвращают одинаковый набор элементов.сравнить два согласованных набора элементов
Я пришел к этому простому решению, немного плагина:
;(function ($) {
$.fn.isEqual = function ($selector) {
return this.add().get().join() === $selector.add().get().join()
}
})(jQuery);
//e.g of usages: if($('div').isEqual($('#mydiv1,#mydiv2'))
//if($(':checkbox').isEqual($('input[type=checkbox].myclass'))
//if($('div').parents().isEqual($('body div').parents()) etc ...
Теперь я думаю, что я что-то, как и все другие решения я имею находку, кажется, на самом деле более сложные, как этот, который, кажется, недостающее привилегированный:
$.fn.sequenceEqual = function(compareTo) {
if (!compareTo || !compareTo.length || this.length !== compareTo.length) {
return false;
}
for (var i = 0, length = this.length; i < length; i++) {
if (this[i] !== compareTo[i])
return false;
}
}
return true;
}
Итак, что может быть недостатком использования плагина $ .isEqual?
Что делает '.add()' do? Разве это не должно быть с аргументом, который будет добавлен к выбранным элементам. На самом деле, '.add(). Get(). Join()' является путаницей. Не уверен, что это правильно и неуверенно в возврате. –
Из [API] (http://api.jquery.com/add/) я не вижу никакой пользы от метода 'add()' без селектора; могу я спросить, почему он там? –
Мне любопытно, что делает 'isEqual'. Поскольку 'get' также является функцией ajax, и, как сказал Vega, add требует аргумента. Иными словами, он ничего не делает. Я думаю, что 'add' и' get' могут быть удалены. Тогда все 'isEqual' будет создавать строку, которая представляет и массив элементов. – travis