2010-03-13 11 views
97

Also versuche ich herauszufinden, wie zwei jQuery-Objekte zu vergleichen, um zu sehen, ob das Elternelement der Körper einer Seite ist.Wie würden Sie jQuery-Objekte vergleichen?

hier ist, was ich habe:

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

Ich weiß, das ist falsch, aber wenn jemand versteht, was ich hinaus will, könnten sie zeigen mir auf die richtige Art und Weise, dies zu tun?

+2

'var $ parent = $ (this) .parent(), $ body = $ ('body');' ' var thesame = $ parent.is ($ body);' http : //api.jquery.com/is/#is-jQuery-object – Victor

+1

$ (this) .parent(). is ($ ('body')); // oder nach etwas anderem außer $ ('body') suchen http://StackOverflow.com/a/6986013/112100 – Omu

Antwort

156

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

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

oder

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

Das stellt nur die Gleichheit sicher, wenn das jQuery-Objekt mit einem einzelnen DOM-Element übereinstimmt. Wenn es mehrere Übereinstimmungen gäbe, würden Sie eine Schleife von irgendeiner Art benötigen, um jede zu vergleichen. –

+1

@Jimmy, ja aber das ist genug für die OP-Anforderungen, er will nur wissen "... ob das Elternelement der Körper ist ..." – CMS

+2

Kann verkürzen zu: if (this.parentNode === document.body); – ehynds

59

Warum nicht:

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

?

+0

Oder 'if ($ (this) .parent(). is ($ ("body"))) ' – dieend

17

Die Schleife ist nicht erforderlich, der Test des ersten Knoten ist nicht erforderlich. So gut wie nichts ist erforderlich, außer sicherzustellen, dass sie die gleiche Länge haben und identische Knoten teilen. Hier ist ein kleines Code-Snippet. Sie können 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 {} 
}); 
+0

Würde das nicht heißen, dass die folgenden divs gleich sind? '

abc
' '
def
' –

+0

Nein, Filter würde nicht DOM-Elemente übergeben, die nicht gleich sind. – tbranyen

2

Ich stolperte über diese Antworten und fragte mich, welcher besser war. Alles hängt von Ihren Bedürfnissen ab, aber das Tippen, Lesen und Ausführen am einfachsten 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

+0

Raw DOM Elements 2 berichtet am schnellsten für mich: sieht für alle anderen gemeldeten Browser genauso aus. –

+0

Genau, es ist das gleiche wie das erste, aber Javascript natives Array Parsing. – Salketer

Verwandte Themen