递归附加节点树

时间:2018-08-19 07:36:05

标签: javascript html

我试图将节点树附加到Dom上,dom树是通过createHTMLDocument创建的,我的第一种方法是这样的: (doc是节点树)

while(doc.head.children.length > 0){
        iframewin.document.head.appendChild(doc.head.children[0]);
    }
    while(doc.body.children.length > 0){
        iframewin.document.body.appendChild(doc.body.children[0]);
    }

这种方法很好用,但是就我而言,在我附加每个节点之前,我需要能够在每个节点上进行一些更改,并且当我有一些带有后代的节点并且实际上是在附加整个节点时,就会出现问题带有其后代,因此我需要使用importNode复制不带其后代的父节点,然后开始将其后代附加到它,如果其后代具有.....

所以我需要递归地执行此操作,但不幸的是我真的不知道如何,我很想看看一些例子:)

1 个答案:

答案 0 :(得分:0)

那么,您的问题是如何递归地遍历节点树以生成修改后的节点树。可以通过以下方式完成:

function transformTree(inputTree, outputTree) {
    if (!inputTree.children) { 
        return;
    }
    for (let i = 0; i < inputTree.children.length; i++) {
        var inputNode = inputTree.children[i];
        var transformedNode = transformNode(inputNode);
        // recursiveCall
        tranformTree(inputNode, transformedNode);
        outputTree.appendChild(transformedNode);
    }
}

transformTree(doc.head, iframewin.document.head);
transformTree(doc.body, iframewin.document.body);

transformNode是在每个节点上进行“一些更改”的功能。