我正在通过createContextualFragment
解析html字符串:
let DocumentFragmentDom = IframeDocument.createRange().createContextualFragment(this.Html);
我正试图将每个节点分别附加到我的ifame上,如下所示:
while(DocumentFragmentDom.children.length > 0) {
if(DocumentFragmentDom.children[0].nodeName.toLowerCase() === "script" &&
DocumentFragmentDom.children[0].hasAttribute("src"))
{
DocumentFragmentDom.children[0].addEventListener("load",RecursiveAppending.bind(this));
IframeDocument.body.appendChild(DocumentFragmentDom.children[0]);
return;
}
IframeDocument.body.appendChild(DocumentFragmentDom.children[0]);
}
您会看到,如果节点是具有src
属性的脚本标签,我将为load事件添加一个eventlistener
,并且回调函数是相同的函数,这是我这样做的原因这是因为如果我有html code 2脚本标签,一个正在使用外部资源,另一个是内联的,如果我不等待外部标签的加载事件,即使内联标签也将在其之前运行在外部下方。
使用此代码,一切都可以正常运行,但是我希望能够附加单个节点,并且当节点具有children
时,我想首先附加父节点,然后附加每个子节点,如果{{ 1}}拥有children
我想继续这样做。
我还需要考虑脚本标签的children
,因为如果遇到eventlistener
的脚本标签,我需要使用回调并停止追加直到事件被触发为止。需要在完全相同的地方继续。
还有一件要考虑的事情是,当您将一个节点从src
附加到另一个文档时,该节点将从documentfragment
移到新文档,因此我不确定应该怎么做,也许克隆每个节点?