javascript - 我应该使用 document.createDocumentFragment 还是 document.createElement

标签 javascript dom

我是 reading about document fragments和 DOM 重排,想知道 document.createDocumentFragmentdocument.createElement 有何不同,因为在我将它们附加到 DOM 元素之前,它们似乎都不存在于 DOM 中。

我做了一个测试(如下),所有这些都花费了完全相同的时间(大约 95 毫秒)。猜测这可能是由于没有样式应用于任何元素,所以可能没有重排。

无论如何,根据下面的示例,为什么我在插入 DOM 时应该使用 createDocumentFragment 而不是 createElement ,两者之间有什么区别。

var htmz = "<ul>";
for (var i = 0; i < 2001; i++) {
    htmz += '<li><a href="#">link ' + i + '</a></li>';
}
htmz += '<ul>';

//createDocumentFragment
console.time('first');
var div = document.createElement("div");
div.innerHTML = htmz;
var fragment = document.createDocumentFragment();
while (div.firstChild) {
    fragment.appendChild(div.firstChild);
}
$('#first').append(fragment);
console.timeEnd('first');

//createElement
console.time('second');
var span = document.createElement("span");
span.innerHTML = htmz;
$('#second').append(span);
console.timeEnd('second');


//jQuery
console.time('third');
$('#third').append(htmz);
console.timeEnd('third');

最佳答案

不同之处在于,当您将文档片段添加到 DOM 时,文档片段实际上会消失。发生的情况是,文档片段的所有子节点都插入到 DOM 中插入文档片段的位置,而文档片段本身并未插入。片段本身继续存在,但现在没有 child 。

这允许您同时将多个节点插入到 DOM 中:

var frag = document.createDocumentFragment();
var textNode = frag.appendChild(document.createTextNode("Some text"));
var br = frag.appendChild(document.createElement("br"));
var body = document.body;
body.appendChild(frag);
alert(body.lastChild.tagName); // "BR"
alert(body.lastChild.previousSibling.data); // "Some text"
alert(frag.hasChildNodes()); // false

关于javascript - 我应该使用 document.createDocumentFragment 还是 document.createElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3397161/

相关文章:

javascript - 如何检查 DOM 元素和/或属性是否有效?

javascript - Chrome 为自定义 HTML 元素的 offsetWidth 返回 0

javascript - DOM 元素何时属于 DOM 树

javascript - 如何在JS中基于 bool 值自动在单词之间插入逗号或&符号?

php - 如何在博客/新闻文章的文本区域中设置文本格式

javascript - 如何全局访问本地函数

javascript - 从 promise 外部访问数据

javascript - Firefox 扩展 - PageMod 脚本修改窗口

java - 如何使用DOM选择具有不同标签的节点?

javascript - 在 Jquery Ajax 中使用选择器和 $(this)