Wie würden Sie jQuery-Objekte vergleichen?


101

Ich versuche also herauszufinden, wie zwei jQuery-Objekte verglichen werden, um festzustellen, ob das übergeordnete Element der Hauptteil einer Seite ist.

Folgendes habe ich:

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

Ich weiß, dass dies falsch ist, aber wenn jemand versteht, worauf ich hinaus will, könnte er mich dann auf den richtigen Weg hinweisen?


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

1
$ (this) .parent (). is ($ ('body')); // oder suchen
Omu

Antworten:


158

Sie müssen die rohen DOM-Elemente vergleichen, z.

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

oder

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

1
Dies stellt nur dann die Gleichheit sicher, wenn das jQuery-Objekt mit einem einzelnen DOM-Element übereinstimmt. Wenn es mehrere Übereinstimmungen gäbe, würden Sie eine Schleife benötigen, um jede zu vergleichen.
Jimmy Cuadra

1
@ Jimmy, ja, aber das ist genug für die OP-Anforderungen, er will nur wissen "... wenn das übergeordnete Element der Körper ist ..."
CMS

2
Kann verkürzt werden zu: if (this.parentNode === document.body);
ehynds


60

Warum nicht:

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

?


1
Oderif ($(this).parent().is($("body")))
sterben Sie

18

Eine Schleife ist nicht erforderlich, das Testen des einzelnen ersten Knotens ist nicht erforderlich. Es ist so gut wie nichts erforderlich, außer sicherzustellen, dass sie gleich lang sind und identische Knoten gemeinsam haben. Hier ist ein kleiner Code-Ausschnitt. Vielleicht möchten Sie dies sogar in ein JQuery-Plugin für Ihre eigenen Zwecke konvertieren.

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

Würde dies nicht bedeuten, dass die folgenden Divs gleich sind? <div>abc</div> <div>def</div>
Charlie Schliesser

Nein, der Filter würde keine DOM-Elemente übergeben, die nicht gleich sind.
Tbranyen

2

Ich stolperte über diese Antworten und fragte mich, welche besser war. Es hängt alles von Ihren Anforderungen ab, aber am einfachsten zu tippen, zu lesen und auszuführen ist natürlich das Beste. Hier ist der Perf-Testfall, den ich getroffen habe, um eine Entscheidung zu treffen.

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


Raw DOM Elements 2 meldet für mich die schnellste Meldung: Sieht auch für alle anderen gemeldeten Browser gleich aus.
Kyle Hotchkiss

Genau, es ist das gleiche wie das erste, verwendet jedoch das native Array-Parsing von Javascript.
Salketer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.