我有一些JSON,我想转入项目符号列表。在每个级别都有一个名称字段和一个子字段(除了最低级别)。我已经尝试过使用递归来完成它,但我遇到了一个问题。除最后一级外,只显示第一个孩子。我有一种感觉,我的一些递归调用可能无法正常返回。这是我到目前为止的代码:
function load_menu(){
json_text=ajax_get("example.json");
json_tree=JSON.parse(json_text);
write_menu(json_tree.children,document.getElementById("level1"));
}
function write_menu(json,element){
for(i=0;i<json.length;i++){
var listitem=document.createElement("li");
element.appendChild(listitem);
var listitemtext=document.createElement("span");
listitem.appendChild(listitemtext);
listitemtext.innerText=json[i].name;
if(json[i].children){
listitemtext.setAttribute("onclick","toggle(this);");
var sublist=document.createElement("ul");
listitem.appendChild(sublist);
write_menu(json[i].children,sublist);
};
};
}
我最后得到一棵看起来像这样的树:
Level 1,1
Level 2,1
Level 3,1
Level 3,2
它应该是这样的:
Level 1,1
Level 2,1
Level 3,1
Level 3,2
Level 2,2
Level 1,2
Level 2,3
我已经通过我的JSON检查了它似乎没问题,所以我想某处的递归肯定存在问题。任何人都可以帮助我吗?
答案 0 :(得分:2)
如果您编写for (i...
,JS解释器将创建一个新变量i
(如果不存在),或重用现有变量(如果存在)。这就是问题,因为在每个递归级别都需要新的循环变量。
因此解决方案是通过编写for (var i...
来强制在每个级别创建变量。