Javascript 如何知道DOM元素是否已装载到树
我对DOM很陌生,我想知道我是否引用了一个可能从DOM树中删除的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
元素并将其删除,但此操作只会从树中卸载这些元素,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