2016-08-03 20 views
0

Ich habe eine Funktion, die von Parameter JQuery-Objekt erwarten. Ich muss herausfinden, ob JQuery-Objekt in DOM existiert oder nicht (in $('<div></div>') Fall).Überprüfen, ob JQuery-Objekt in DOM existiert

Ich überprüfe nach Duplikaten und fand mehrere Antworten (link1, link2, link3). Kann ein Experte etwas Licht scheinen, ist der beste (schnellste) Weg es zu tun.

Optionen sind:

$.contains //not working 
$a.find 
$a.parent() 
$a.closes() 
document.contains() 
$a[0].isConnected 

Snippet:

var a = $("#test"); //length 1 
 
var b = $('<div></div>'); //length 1 
 

 
console.log("contains: ", $.contains(document, a), $.contains(document, b)); //false, false 
 
console.log("find: ", !!$(document).find(a).length, !!$(document).find(b).length); // true, false 
 
console.log("parent: ", !!a.parent().length, !!b.parent().length); // true, false 
 
console.log("closest: ", !!a.closest('body').length, !!b.closest('body').length); //true, false 
 
console.log("document.contains: ", document.contains(a[0]), document.contains(b[0])); //true, false 
 
console.log("isConnected: ", a[0].isConnected, b[0].isConnected); //true, false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
</head> 
 
<body> 
 
    <div id="test"></div> 
 
</body> 
 
</html>

Danke.

Antwort

1

Wenn die Leistung ein großes Problem für Sie ist, sind native Methoden in der Regel der richtige Weg.

document.contains($myJQueryEl[0]) 

übertrifft den nächstschnellste jQuery Betrieb $elem.closest('body'), um etwa 4-mal nach this answer and its comment.

Wenn Sie wirklich Leistung für Nicht-Dokument-Elemente suchen, ist Shadow DOM definitiv Ihre beste Option.

+0

Hallo, document.contains funktioniert nicht in IE 11. – Makla

+1

@Makla Sie nicht das Browser-Kompatibilität als eine Ihrer Anforderungen erwähnen. Wenn das der Fall ist, dann ist, wie ich oben sagte, $ elem.closest ('body') 'die zweitschnellste Alternative. :) – Harangue

1

Verwenden Sie jQuery nicht, wenn Sie die beste Leistung wünschen. Sie können isConnected versuchen:

der Getter der isConnected Attribut true zurückgeben muss, wenn context objectconnected ist, und andernfalls false.

Ein element ist angeschlossen, wenn sein shadow-including root ein document ist.

$element[0].isConnected; // jQuery 
element.isConnected; // Native JS 
+0

Hi, anscheinend funktioniert isConnected nicht in Firefox 48.0 oder IE 11. – Makla

+0

@Makla Scheint tatsächlich eine neue Sache, die ich bis heute nie bemerkt habe. Es funktioniert auf Firefox 49. – Oriol

Verwandte Themen