我正在 阅读有关文档片段 和 DOM 重排的内容,想知道 document.createDocumentFragment
与 document.createElement
有何不同,因为在我将它们附加到 DOM 元素之前,它们似乎都不存在于 DOM 中。
我做了一个测试(如下),所有这些都花费了完全相同的时间(大约 95 毫秒)。猜测这可能是由于没有样式应用于任何元素,所以可能没有重排。
无论如何,根据下面的示例,为什么我应该使用 createDocumentFragment
而不是 createElement
插入 DOM 时,两者之间有什么区别。
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');
原文由 screenm0nkey 发布,翻译遵循 CC BY-SA 4.0 许可协议
不同之处在于,当您将文档片段添加到 DOM 时,文档片段实际上会消失。发生的情况是,文档片段的所有子节点都插入到 DOM 中插入文档片段的位置,而文档片段本身并未插入。片段本身继续存在,但现在没有孩子。
这允许您同时将多个节点插入到 DOM 中: