我不明白为什么会失败:

var recursiveElementGenerator = function (elem_spec) {
    elem = document.createElement(elem_spec.tag);

    if (elem_spec.children) {
        for (var i=0; i<elem_spec.children.length; i++) {
            var c_elem = elem_spec.children[i];
            var n_elem = recursiveElementGenerator(c_elem);
            alert(elem===n_elem);
            elem.appendChild(n_elem);
        };
    };
    return elem;
};


elem_spec对象具有tag和children属性,后者是一组相似对象。

失败是因为递归调用返回的元素与该递归调用之前创建的元素相同。我没有得到-类似的版本可以通过在数组上的pop()调用中获取其标签值链来工作,然后将该数组传递给递归调用。

最佳答案

尝试使用:

var elem = document.createElement(elem_spec.tag);


代替:

elem = document.createElement(elem_spec.tag);


不使用var关键字会使您的变量在全局范围内运行。使用它会在本地作用域中创建变量,从创建变量的行到函数定义的结尾。

关于javascript - JavaScript递归元素创建失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5333572/

10-12 12:27
查看更多