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?


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])

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")) {
  ...
}

?


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 {}
});

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.