我见过一些向 DOM 添加元素的不同方法。例如,最流行的似乎是
document.getElementById('foo').innerHTML ='<p>Here is a brand new paragraph!</p>';
or
newElement = document.createElement('p');
elementText = document.createTextNode('Here is a brand new parahraph!');
newElement.appendChild(elementText);
document.getElementById('foo').appendChild(newElement);
但我不确定做任何一个都有什么好处。是否有一个经验法则来规定何时应该做其中一个而不是另一个,或者其中一个完全是错误的?
一些注意事项:
Using innerHTML
在 IE 中速度更快,但在 chrome + firefox 中速度较慢。这是一个基准 http://jsperf.com/innerhtml-vs-w3c-dom/6用一组不断变化的<div>
s + <p>
s; 这是一个基准 http://jsperf.com/dom-table-generation显示这个常数,简单<table>
.
另一方面,DOM 方法是传统标准——innerHTML
在 HTML5 中标准化 - 并允许您保留对新创建的元素的引用,以便您以后可以修改它们。
-
因为innerHTML 速度快(足够)、简洁且易于使用,所以很容易在任何情况下都依赖它。但要注意使用innerHTML
分离所有现有的 DOM 节点从文档中。您可以在此页面上测试以下示例。
首先,让我们创建一个函数来测试节点是否在页面上:
function contains(parent, descendant) {
return Boolean(parent.compareDocumentPosition(descendant) & 16);
}
这将返回true
if parent
包含descendant
。像这样测试一下:
var p = document.getElementById("portalLink")
console.log(contains(document, p)); // true
document.body.innerHTML += "<p>It's clobberin' time!</p>";
console.log(contains(document, p)); // false
p = document.getElementById("portalLink")
console.log(contains(document, p)); // true
这将打印:
true
false
true
它可能看起来不像我们使用的innerHTML
应该会影响我们对portalLink
元素,但确实如此。需要再次取回才能正确使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)