gpt4 book ai didi

JavaScript:将节点复制到 DocumentFragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:21:42 24 4
gpt4 key购买 nike

我认为 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);

最佳答案

是的,您可以使用 document.createRange 轻松创建带有 HTML 字符串的片段方法。

document.createRange 返回 Range对象,它有一个名为 createContextualFragment 的方法这允许您从 HTML 中获取片段。

function fragmentFromString(strHTML) {
return document.createRange().createContextualFragment(strHTML);
}

let div = document.createElement('div');
div.innerHTML = '<p>Testing</p>';

let fragment = fragmentFromString(div.innerHTML);
console.log(fragment);
<div>
<p>Random Content</p>
</div>

适用于所有主流浏览器和 IE11。

关于JavaScript:将节点复制到 DocumentFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41774889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com