【发布时间】:2012-07-15 22:54:21
【问题描述】:
有人告诉我不要像这样使用element.innerHTML += ... 附加内容:
var str = "<div>hello world</div>";
var elm = document.getElementById("targetID");
elm.innerHTML += str; //not a good idea?
它有什么问题?,我还有什么其他选择?
【问题讨论】:
-
他们有没有告诉你用什么代替
element.innerHTML +=? -
我怀疑在 2012 年警告过你的人是否有充分的理由这样做。浏览器速度很快,对这个属性的支持几乎是普遍的。除了坚持使用特定库的设施(如果您使用 jQuery,请使用 $() 构造函数创建元素)之外,我再也看不到任何问题了。与往常一样,测试并找出答案。
-
@Triptych:除了性能还有其他考虑。例如,由于主元素的 DOM 子树完全重建,现有元素上的事件处理程序将被破坏。此外,元素中的任何
<script>都将在某些浏览器中重新运行。最后,不能保证elm.innerHTML = elm.innerHTML将始终复制元素 DOM 的相同副本。 -
您没有任何东西可以显示最初的 innerHTML 引用,使用 += 您只会将内容附加到现有内容上。此外,最好使用函数 appendChild 向 DOM 添加内容。
标签: javascript html innerhtml anti-patterns