Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何知道DOM元素是否已装载到树_Javascript_Html_Dom - Fatal编程技术网

Javascript 如何知道DOM元素是否已装载到树

Javascript 如何知道DOM元素是否已装载到树,javascript,html,dom,Javascript,Html,Dom,我对DOM很陌生,我想知道我是否引用了一个可能从DOM树中删除的DOM元素,我如何检查它是否仍然被装载 比如: 之后我可能会选择元素并将其删除,但此操作只会从树中卸载这些元素,div变量仍然指向该DOM元素 我想知道是否有一个函数可以测试div是否仍然在页面上(挂载在DOM树上)?您可能可以试试这个函数 document.body.contains(yourDiv) contains方法将返回true或false如果节点是文档的一部分,则其baseURI属性将是字符串URL,否则将为null

我对DOM很陌生,我想知道我是否引用了一个可能从DOM树中删除的DOM元素,我如何检查它是否仍然被装载

比如:

之后我可能会选择
元素并将其删除,但此操作只会从树中卸载这些元素,div变量仍然指向该DOM元素


我想知道是否有一个函数可以测试div是否仍然在页面上(挂载在DOM树上)?

您可能可以试试这个函数

document.body.contains(yourDiv)

contains方法将返回true或false

如果节点是文档的一部分,则其
baseURI
属性将是字符串URL,否则将为
null

var div = document.createElement("DIV"), 
u1=div.baseURI, u2, u3; //first url, un-attached
document.body.appendChild(div);
u2=div.baseURI; //second url, attached
div.remove();
u3=div.baseURI; //third url, detached
alert(JSON.stringify([u1,u2,u3], null, 2));
在devtools中运行此页面可显示:

[
  null,
  "http://stackoverflow.com/questions/34640316/how-to-know-if-a-dom-element-mounted-to-tree",
  null
]
这意味着要确定是否连接了节点,只需请求
elm.baseURI

if(div.baseURI){ 
   alert('attached')
 }else{
   alert('not attached');
}

БББББиЯЯиЯЯЯиааааааааааа107

if(theDiv.parentNode==null){
//不在DOM树中
}
否则{
//在DOM树中!
}

在将其附加到正文之前,以及从正文中删除之后,该值将为空。

根据的改进版本

您可以使用


注意:这不适用于旧浏览器(Internet Explorer,Edge<79,Safari<10)

@Teemu元素可以有父元素,而不是主DOM的一部分。如果它在头部呢?或者dom中的任何其他位置?@谢谢,我会试试这个。@PeeHaa一般来说,这是一个值得关注的问题,但是OP说他用
document.body.appendChild(div)将元素添加到dom中,所以我们知道它在主体中,只需要检测它是否被删除。@PeeHaa var yourNode=document.getElementById(“yourID”);yourNode.contains(yourDiv);=)您可以使用
document.documentElement.contains(yourDiv)
搜索head+body。这不是真的,一个元素可以有一个父元素而不被挂载。@php\u nub\u qq您能举个例子吗?一个分离的子树保留内部关系。如果存在
body->A->B
,而您确实存在
body.removeChild(A)
B.parentNode!=null
尽管没有安装。这也不是真的,在firefox 54中尝试它,目前我在所有3个插槽中都看到链接。@php\u nub\u qq:一年半的时间对于一个补丁来说是很好的生活。我会检查FF并用一个新的想法汇报。
if(div.baseURI){ 
   alert('attached')
 }else{
   alert('not attached');
}
function isMounted(node) {
    if (node.nodeType === Node.DOCUMENT_NODE) return true;
    if (node.parentNode == undefined) return false;
    return isMounted(node.parentNode);
}
div.isConnected