【发布时间】:2017-06-06 02:32:22
【问题描述】:
我认为 DocumentFragment 的全部意义在于能够在不接触 DOM 的情况下构建内容,直到它准备就绪。
鉴于 DocumentFragment 不支持innerHTML,它可能有点乏味。另一方面,一旦构造完成,通过片段本身很容易将内容添加到现有的 DOM 节点。
如果我创建 div 而不将其添加到 DOM,我可以按照我喜欢的方式填充它,包括 innerHTML。据我所知,它应该不会对性能产生额外影响。
是否有一种简单的方法(即一行左右)将现有 DOM 节点的内容复制到 DocumentFragment?该过程如下所示:
var div=document.createElement('div');
var fragment=document.createDocumentFragment();
div.innerHTML='…';
// copy contents to fragment
// etc
这样我可以两全其美。
回答
下面是@KevBot 的答案,并入示例中:
var divTest=document.querySelector('div#test');
var html='<p>One</p><p>Two</p>';
var fragment=document.createRange().createContextualFragment(html);
divTest.appendChild(fragment);
【问题讨论】:
-
我喜欢这个问题,其中一些解决方案实现了一些晦涩的 JavaScript。
-
如果我创建一个 div 而不将它添加到 DOM 中,我可以按照我喜欢的方式填充它,包括 innerHTML。据我所知,它应该不会对性能产生额外影响。 div 和 docFrag 之间的区别在于,当您将 div 附加到 DOM 时,它会与您添加的所有内容一起保留在那里。使用 docFrag,您可以将其附加到 DOM,并且您添加到其中的所有内容都在 DOM 中,但 docFrag 不在。当你把桌布拉出来但把盘子留在桌子上时,有点像那种桌布技巧。
标签: javascript dom nodes documentfragment