检查DOM中是否存在JQuery对象

时间:2016-08-03 16:45:10

标签: javascript jquery

我有一个期望来自参数JQuery对象的函数。我需要查找DOM中是否存在JQuery对象(在$('<div></div>') case中)。

我检查重复项并找到了几个答案(link1link2link3)。一些专家可以发光一些光明女巫是最好(最快)的方式。

选项包括:

$.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>

谢谢。

2 个答案:

答案 0 :(得分:2)

如果性能是您真正关心的问题,那么本机方法通常就是您的选择。

document.contains($myJQueryEl[0])

根据this answer and its comment,优于下一个最快的jQuery操作$elem.closest('body'),大约4次。

如果您真的在寻找非文档元素的效果,Shadow DOM绝对是您的最佳选择。

答案 1 :(得分:1)

如果您想获得最佳性能,请不要使用jQuery。您可以尝试isConnected

  

如果context objectconnected,则isConnected属性的getter必须返回true,否则返回false。

     

如果elementshadow-including root,则document已连接   partial painting example image

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