JQuery nesnelerini nasıl karşılaştırırsınız?


101

Bu yüzden, ana öğenin bir sayfanın gövdesi olup olmadığını görmek için iki jQuery nesnesini nasıl karşılaştıracağımı anlamaya çalışıyorum.

İşte sahip olduğum şey:

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

Bunun yanlış olduğunu biliyorum, ama birisi ne yaptığımı anlarsa, beni bunu yapmanın doğru yoluna yönlendirebilirler mi?


2
var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object
Victor

1
$ (bu) .parent (). is ($ ('gövde')); // veya $ ('body') stackoverflow.com/a/6986013/112100
Omu

Yanıtlar:


158

Ham DOM öğelerini karşılaştırmanız gerekir, örneğin:

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

veya

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

1
Bu, yalnızca jQuery nesnesi tek bir DOM öğesi ile eşleşirse eşitliği sağlar. Birden fazla eşleşme varsa, her birini karşılaştırmak için bir çeşit döngüye ihtiyacınız olacaktır.
Jimmy Cuadra

1
@Jimmy, evet ama bu OP gereklilikleri için yeterli, sadece "... ana unsur
vücutsa

2
Kısaltılabilir: if (this.parentNode === document.body);
ehynds


60

Neden olmasın:

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

?


1
Veyaif ($(this).parent().is($("body")))
dieend

18

Döngü gerekli değildir, tek ilk düğümün test edilmesi gerekli değildir. Aynı uzunlukta olmalarını ve aynı düğümleri paylaşmalarını sağlamaktan başka hiçbir şeye gerek yoktur. İşte küçük bir kod parçacığı. Bunu kendi kullanımınız için bir jquery eklentisine dönüştürmek isteyebilirsiniz.

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

Bu, aşağıdaki div'lerin eşit olduğu anlamına gelmez mi? <div>abc</div> <div>def</div>
Charlie Schliesser

Hayır, filtre eşit olmayan DOM öğelerini iletmez.
tbranyen

2

Bu cevaplara tökezledim ve hangisinin daha iyi olduğunu merak ettim. Her şey sizin ihtiyaçlarınıza bağlıdır ancak yazması, okuması ve çalıştırması en kolay olanı elbette en iyisidir. İşte bir karar vermek için yaptığım mükemmel test çantası.

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


Benim için en hızlı raporu veren Raw DOM Elements 2: rapor edilen diğer tüm tarayıcılar için de aynı görünüyor.
Kyle Hotchkiss

Tam olarak, ilkiyle aynıdır ancak javascript'in yerel dizi ayrıştırmasını kullanır.
Salketer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.