Как бы вы сравнили объекты jQuery?


101

Итак, я пытаюсь понять, как сравнить два объекта jQuery, чтобы увидеть, является ли родительский элемент телом страницы.

вот что у меня есть:

if ( $(this).parent() === $('body') ) ...

Я знаю, что это неправильно, но если кто-нибудь поймет, к чему я клоню, могут ли они указать мне на правильный способ сделать это?


2
var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object
Виктор

1
$ (это) .parent (). is ($ ('body')); // или проверьте что-нибудь еще, кроме $ ('body') stackoverflow.com/a/6986013/112100
Omu

Ответы:


158

Вам нужно сравнить необработанные элементы DOM, например:

if ($(this).parent().get(0) === $('body').get(0))

или

if ($(this).parent()[0] === $('body')[0])

1
Это обеспечит равенство только в том случае, если объект jQuery соответствует одному элементу DOM. Если бы было несколько совпадений, вам понадобился бы какой-то цикл для сравнения каждого из них.
Джимми Куадра,

1
@ Джимми, да, но этого достаточно для требований OP, он хочет только знать «... если родительский элемент - это тело ...»
Кристиан С. Сальвадо

2
Можно сократить до: if (this.parentNode === document.body);
ehynds



18

Цикл не требуется, тестирование единственного первого узла не требуется. Практически ничего не требуется, кроме обеспечения одинаковой длины и одинаковых узлов. Вот небольшой фрагмент кода. Возможно, вы даже захотите преобразовать это в плагин jquery для собственного использования.

jQuery(function($) {
  // Two separate jQuery references
  var divs = $("div");
  var divs2 = $("div");

  // They are equal
  if (divs.length == divs2.length && divs.length == divs.filter(divs2).length) {         

  // They are not
  } else {}
});

Разве это не говорит о том, что следующие div равны? <div>abc</div> <div>def</div>
Чарли Шлиссер

Нет, фильтр не будет пропускать элементы DOM, которые не равны.
tbranyen

2

Я наткнулся на эти ответы и подумал, какой из них лучше. Все зависит от ваших потребностей, но, конечно, легче всего набрать, прочитать и выполнить. Вот тестовый пример, который я сделал, чтобы принять решение.

http://jsperf.com/jquery-objects-comparison


Raw DOM Elements 2 сообщает о самом быстром для меня: похоже, то же самое для всех других браузеров, о которых сообщили.
Кайл Хотчкисс

Точно, он такой же, как и первый, но использует собственный синтаксический анализ массива javascript.
Salketer
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.