2016-08-03 49 views
0

我有一個可以從參數JQuery對象中獲得的函數。我需要找到JQuery對象是否存在於DOM中(在$('<div></div>')的情況下)。檢查DOM中是否存在JQuery對象

我檢查重複項,發現了幾個答案(link1link2,link3)。一些專家能否照亮一些光女巫是最好的(最快)方法。

選項包括:

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

段:

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>

謝謝。

回答

1

如果性能是您非常關心的問題,那麼本機方法通常是最佳選擇。

document.contains($myJQueryEl[0]) 

根據this answer and its comment優於下最快jQuery的操作,$elem.closest('body'),通過約4倍。

但是,如果您真的在尋找非文檔元素的性能,那麼Shadow DOM絕對是您的最佳選擇。

+0

嗨,document.contains不能在IE 11 – Makla

+1

工作@Makla你沒有提到的瀏覽器兼容性,您的要求之一。如果是這樣的話,那麼正如我上面所說'$ elem.closest('body')'是下一個最快的選擇。 :) – Harangue

1

如果您想獲得最佳性能,請不要使用jQuery。您可以嘗試isConnected

isConnected屬性的getter方法必須返回true,如果context objectconnected,否則爲false。

如果其shadow-including rootdocument,則連接element

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

嗨,顯然isConnected不適用於Firefox 48.0或IE 11. – Makla

+0

@Makla似乎確實是一件新事物,直到今天我從未注意到它。它適用於Firefox 49。 – Oriol