Javascript 如何检查DOM引用是否已被销毁?
假设我以老式方式或任何其他方式选择一个元素,通过这种方式可以获得DOM引用: 然后我从DOM中删除该元素的父元素,从而也删除了el。或者我直接移除el 有没有办法检查el是否仍然是有效的引用,它引用的HTML是否仍然存在于DOM中?如果元素位于DOM页面上,则会填充baseURI属性。检查一下Javascript 如何检查DOM引用是否已被销毁?,javascript,dom,Javascript,Dom,假设我以老式方式或任何其他方式选择一个元素,通过这种方式可以获得DOM引用: 然后我从DOM中删除该元素的父元素,从而也删除了el。或者我直接移除el 有没有办法检查el是否仍然是有效的引用,它引用的HTML是否仍然存在于DOM中?如果元素位于DOM页面上,则会填充baseURI属性。检查一下 或者,尝试document.body.containsnode。您无法检查它是否已被销毁,但可以检查它是否仍在文档节点中 function inDocument(el) { var parentN
或者,尝试document.body.containsnode。您无法检查它是否已被销毁,但可以检查它是否仍在文档节点中
function inDocument(el) {
var parentNode = el.parentNode;
while (parentNode) {
if (parentNode === document) {
return true;
}
parentNode = parentNode.parentNode;
}
return false;
}
只要找一个父母
function hasBeenDestroyed(el){ return !el.parentNode; }
演示
var el=document.getElementById'myDiv';
getElementById'destroyBtn'.onclick=function{el.outerHTML=;};
document.getElementById'checkBtn'.onclick=function{
如果已经发出“分区已被摧毁”的警报;
否则警告“div还在这里”;
};
函数hasBeenDestroyedel{return!el.parentNode;}
myDiv{填充:1em;背景:红色;}
摧毁这个部门
检查div是否仍然存在
下面是一个使用document.containsel;的示例
函数移除span
{
var el=document.getElementByIdtest;
el.parentNode.removeChildel;
document.getElementByIdexist.innerHTML=document.containsel;
}
这是一个div,这是一个span
删除跨度
跨度存在吗?true@blex不,那不行。如果删除el,对el的引用仍然存在。document.containsel;?其他答案中的一个更可靠、更具语义,但只是为了好玩,我注意到getBoundingClientRect在移除后通常会更改为{0,0,0}。元素可以有parentNode,但不能在文档中。例如,如果您有一个不在文档中但仅作为DOM对象的,并且它有一个,则它有一个parentNode。他不会询问它是否在文档中。他在问这个元素或者它的祖先是否已经被摧毁了。那完全不同。但是我明白你的意思,是的,这个函数在这种情况下是无效的。当然,但是你可以简化这个过程,说,而el{if el==document返回true;el=el.parentNode;}.Works。也可能比document.contains更有效。
function hasBeenDestroyed(el){ return !el.parentNode; }