Рекурсивно перебирая узлы фрагмента документа и все дочерние узлы - PullRequest
0 голосов
/ 03 июля 2018

Я анализирую строку html через createContextualFragment:

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, я добавлю eventlistener для события загрузки, а обратный вызов - та же функция, поэтому я делаю это потому, что если у меня есть теги html code 2, один из которых использует внешний ресурс, а другой - встроенный, если я не буду ждать события загрузки для внешнего тега, встроенный будет выполняться до него, даже если встроенный тег находится ниже внешнего .

С этим кодом все работает отлично, но я хотел бы иметь возможность добавлять отдельные узлы, и когда узел имеет children, я хотел бы сначала добавить родительский узел, а затем каждый дочерний узел, и если children имеет children Я бы хотел продолжить это.

Мне также нужно принять во внимание eventlistener для тега script, потому что, если я сталкиваюсь с тегом script с src, мне нужно использовать обратный вызов и прекратить добавление до тех пор, пока событие не будет запущено, и затем мне нужно продолжить в точно такая же точка. еще одна вещь, которую следует учитывать, - когда вы добавляете узел из documentfragment в другой документ, узел будет перемещен из documentfragment в новый документ, поэтому я не уверен, как именно я должен это сделать, возможно, клонировать каждый узел?

...