2011-07-23 92 views
7

我想完全清除JavaScript的DOM。Javascript清除DOM

我已经尝试了一些东西,像这样:

document.getElementsByTagName("html")[0].innerHTML = ""; 
document.body.innerHTML = ""; 

有趣的是,清除头这样会产生一个错误(“对于此操作无效目标元素”)在IE,但会成功的清除前往Chrome。但是,像这样清理机体可以在IE中使用,但在Chrome中静静地失败。

我也曾尝试

document.childNodes.length = 0; 

但是这显然是一个只读属性,并不会做任何事情。

是否有一个很好的跨浏览器方式来清除DOM?

+1

我的问题是什么是你想用这正是完成。是因为我不能想到你需要这样做的情况 – Ibu

+7

Jeez,人们总是问我所有的问题。即使你想不出为什么要以编程方式清除DOM,我仍然想要这样做。如果你喜欢,只是假设我只是为了好玩而随便想做。 –

+0

所以,你正在执行你的页面中的JavaScript,你想清除你现在正在从页面运行的JavaScript?听起来对我来说是一个问题。 – jfriend00

回答

11

这工作...

document.removeChild(document.documentElement); 

jsFiddle

请注意,浏览器将保持doctype不变。

+0

我更喜欢你的编辑。一条线。 – Ibu

+0

怎么没人提到document.write()? –

2

这里是有用的例子,并不完美,但可以使用

/** 
* clear child nodes 
* @param {HTMLElement} node 
*/ 
    clearChildren : function(node) { 
     if (!node) { 
      return; 
     } 
     if(node.innerHTML){ 
      node.innerHTML = ''; 
      return; 
     } 
     while (node.childElementCount > 0) { 
     var child = node.childNodes.item(0); 
     if(isIE){ 
      child.onmousedown = null; 
      child.onmouseover = null; 
      child.onmouseout = null; 
      child.onclick = null; 
      child.oncontextmenu = null; 
     } 
     node.removeChild(child); 
    } 
    } 
2

虽然不跨浏览器,Opera有一个可写outerHTML属性。

document.documentElement.outerHTML = ""; 
0

它可以是简单得多

document.write();