我不明白为什么会失败:
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 递归元素创建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5333572/