Bagaimana Anda membandingkan objek jQuery?

101

Jadi saya mencoba mencari cara untuk membandingkan dua objek jQuery, untuk melihat apakah elemen induknya adalah badan halaman.

inilah yang saya miliki:

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

Saya tahu ini salah, tetapi jika ada yang mengerti apa yang saya maksud, dapatkah mereka mengarahkan saya ke cara yang benar untuk melakukan ini?

Kyle Hotchkiss
sumber
2
var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object
Victor
1
$ (ini) .parent (). is ($ ('body')); // atau periksa apa pun selain $ ('body') stackoverflow.com/a/6986013/112100
Omu

Jawaban:

158

Anda perlu membandingkan elemen DOM mentah, misalnya:

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

atau

if ($(this).parent()[0] === $('body')[0])
CMS
sumber
1
Itu hanya akan memastikan kesetaraan jika objek jQuery cocok dengan satu elemen DOM. Jika ada beberapa kecocokan, Anda memerlukan semacam pengulangan untuk membandingkan masing-masing.
Jimmy Cuadra
1
@Jimmy, ya tapi ini cukup untuk persyaratan OP, dia hanya ingin tahu "... jika elemen induknya adalah tubuh ..."
CMS
2
Dapat disingkat menjadi: if (this.parentNode === document.body);
ehynds
60

Kenapa tidak:

if ($(this).parent().is("body")) {
  ...
}

?

cletus
sumber
1
Atauif ($(this).parent().is($("body")))
mati
18

Pendauran tidak diperlukan, pengujian satu node pertama tidak diperlukan. Hampir tidak ada yang diperlukan selain memastikan mereka memiliki panjang yang sama dan berbagi node yang identik. Berikut ini potongan kode kecil. Anda bahkan mungkin ingin mengubahnya menjadi plugin jquery untuk penggunaan Anda sendiri.

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 {}
});
tbranyen.dll
sumber
Bukankah ini mengatakan bahwa div berikut sama? <div>abc</div> <div>def</div>
Charlie Schliesser
Tidak, filter tidak akan melewatkan elemen DOM yang tidak sama.
tbranyen
2

Saya tersandung pada jawaban ini dan bertanya-tanya mana yang lebih baik. Itu semua tergantung pada kebutuhan Anda tetapi yang paling mudah untuk diketik, dibaca dan dijalankan tentu saja adalah yang terbaik. Inilah kasus uji kinerja yang saya buat untuk membuat keputusan.

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

Salketer
sumber
Raw DOM Elements 2 melaporkan paling cepat bagi saya: terlihat sama untuk setiap browser lain yang dilaporkan juga.
Kyle Hotchkiss
Sama persis dengan yang pertama tetapi menggunakan penguraian array asli javascript.
Salketer