如果您有大量内容要附加到或填充现有元素,则 innerHTML 是有意义的。
不久前,DOM 方法比分配给元素的 innerHTML 属性要慢得多,但最近它们非常快,而且由于所有必需的调用而变得不方便。但是您可以创建辅助函数来接受具有创建元素所需的所有信息的对象以减轻负担。
使用 innerHTML 有一些注意事项:
- 在其他兄弟节点之间插入多个兄弟节点是很困难的。为此,您最终将 HTML 插入到其他元素(例如 div)中,然后将创建的元素移动到 DOM 中。不幸的是,您不能为此使用 documentFragment,因此它需要遍历子节点
- 在表格上使用它可能会出现问题,IE 不喜欢修改除了 TD 之外的表格中各种元素的 innerHTML
- 浏览器生成不同的 HTML 作为 innerHTML 属性,因此使用它来序列化元素是有问题的
- 使用 innerHTML 属性可能会删除其他元素上的侦听器,即使它们没有被 innerHTML 修改
例如
<div id="div0">div0</div>
<!-- Button to add a click listener to above div -->
<button onclick="
var el = document.getElementById('div0');
el.onclick = function(){alert(this.id);}
">Add listener as property</button>
<!-- Button to modify the body's innerHTML -->
<button onclick="
var body = document.getElementsByTagName('body')[0];
body.innerHTML += '';
">Append to body.innerHTML</button>
您可以单击第一个按钮向div0添加单击侦听器,但是当您单击第二个按钮时(似乎什么都不做,但实际上重置了 innerHTML),侦听器将被删除。