在文档碎片节点和所有子节点上进行递归迭代

时间:2018-07-03 06:26:54

标签: javascript dom appendchild

我正在通过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移到新文档,因此我不确定应该怎么做,也许克隆每个节点?

0 个答案:

没有答案