Javascript 为什么IE在DOM更改后丢弃DOM元素的innerHTML/子元素?

Javascript 为什么IE在DOM更改后丢弃DOM元素的innerHTML/子元素?,javascript,html,internet-explorer,dom,Javascript,Html,Internet Explorer,Dom,我针对IE、Chrome和Firefox测试了下面的代码,并想知道是什么导致了结果的差异 var body=document.getElementsByTagName('body')[0]; body.innerHTML='我是一个文本'; var divElement=document.getElementById('myId'); log(divElement.children.length); //所有浏览器都会说“1”! body.innerHTML=“”;//只是重置DOM log(

我针对IE、Chrome和Firefox测试了下面的代码,并想知道是什么导致了结果的差异

var body=document.getElementsByTagName('body')[0];
body.innerHTML='我是一个文本';
var divElement=document.getElementById('myId');
log(divElement.children.length);
//所有浏览器都会说“1”!
body.innerHTML=“”;//只是重置DOM
log(divElement.children.length);

//Chrome和FF表示“1”,即“对不起,伙计们,这是0”
IE对
innerHTML
属性采用了不同的方法(与其他浏览器相比)。虽然预期的操作是首先删除子节点(保留引用),然后设置新的HTML片段,即实际上似乎递归地销毁所有子节点,使引用(如示例中的
divElement
)完全为空且不起作用。
innerText
方法具有类似的效果

我得到的最好的解释是在一次声明中,在IE中,
innerHTML
是DHTML(而不是DOM)特性,也是一种低级破坏性方法。我知道
innerHTML
是在W3DOM规范之前实现的(回到IE/Netscape浏览器战争中),但不知道这种低级行为是否是IE中的遗留实现


尽管如此,(这是一个非常新的候选人推荐,)。W3上的其他参考文献也不是决定性的(至少我没有发现任何一篇)。

由于对新的和旧的
感到困惑,我更新了这个问题,简单地设置
innerHTML=“”
。这篇文章在19:45的第9频道演讲中提到。