这是我添加子元素的函数。对于flag,它只会添加子节点一次。如果没有标志,它就会进入无限循环。标志是全局的
function addChildToParent(node, parent, child) {
if (node.name == parent) {
node.add(child);
flag = true;
}
else if (flag==false){
for (i = 0; i < node.children.length; i++) {
addChildToParent(node.getChild(i), parent, type, child);
}
}
}
在这里被调用,smth的长度是3
request.onload = function () {
var ecs=[];
for(i=0;i<smth.length;i++){
ecs[i]= new Node(smth[i],EC);
flag=false;
addChildToParent(node,smth[i],ecs[i]);
}
};
上面的函数被调用了2次。问题是我做错了什么
您应该将else if
替换为else
,或者在else if
条件中添加另一个条件,如下所示
function addChildToParent(node, parent, child) {
if (node.name == parent && flag !==false) {
node.add(child);
flag = true;
}
else if (node.name !== parent && flag == false){
for (i = 0; i < node.children.length; i++) {
addChildToParent(node.getChild(i), parent, type, child);
}
}
}
感谢我的帖子的zer00ne评论,我已经确定了问题。for
中的i
变量必须与var i
一起使用,否则它会被覆盖,因为它不是局部变量,而是全局变量。
for (var i = 0; i < node.children.length; i++) {
addChildToParent(node.getChild(i), parent, type, child);
}
修复问题