Як би ви порівняли об’єкти 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
Ому,

Відповіді:


158

Вам потрібно порівняти необроблені елементи DOM, наприклад:

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

або

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

1
Це забезпечить рівність лише в тому випадку, якщо об'єкт jQuery відповідає одному елементу DOM. Якщо було декілька збігів, вам знадобиться певний цикл для порівняння кожного.
Джиммі Куадра

1
@Jimmy, так, але цього достатньо для вимог до ОП, він хоче лише знати, "... якщо батьківський елемент є тілом ..."
CMS

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



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>abc</div> <div>def</div>
Чарлі Шліссер

Ні, фільтр не передасть елементи DOM, які не рівні.
tbranyen

2

Я наткнувся на ці відповіді і задумався, хто з них кращий. Все залежить від ваших потреб, але найкраще, звичайно, набирати, читати та виконувати. Ось парфузний зразок, який я прийняв для прийняття рішення.

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


Сирі DOM Elements 2, які повідомляють про мене найшвидше: виглядає так само, як і для кожного іншого звіту браузера.
Kyle Hotchkiss

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