【发布时间】:2014-09-29 19:32:12
【问题描述】:
我针对 IE、Chrome 和 Firefox 测试了以下代码,想知道是什么导致了结果的差异。
var body = document.getElementsByTagName('body')[0];
body.innerHTML = '<div id="myId"><span>I am a text</span></div>';
var divElement = document.getElementById('myId');
console.log(divElement.children.length);
// All browsers say "1" !
body.innerHTML = ''; // just resetting the DOM
console.log(divElement.children.length);
// Chrome and FF say "1", IE says "Sorry guys, it's 0"
不出意外,在三个浏览器中,在第二次innerHTML 更改后,divElement 对象不再引用渲染的<div>。我对此没有任何问题。
我发现更有趣的是,IE 似乎丢弃了divElement 的孩子。 Chrome 和 FF 仍然允许我使用旧标签及其子标签,就像它们被渲染一样,但 IE 将标签变成了一个空壳。
浏览器处理导致此行为的 innerHTML 更改的方式可能有什么不同?
【问题讨论】:
-
由于phil 对新旧
<div>感到困惑,我已将问题更新为简单地设置innerHTML=""。 -
这篇确切的帖子在 19:45 的第 9 频道谈话The Microsoft Edge Rendering Engine that makes the Web just work 中发表。
标签: javascript html internet-explorer dom