Javascript 从JSON数据创建HTML项目符号列表时出现问题
我有一些JSON,我想把它们交给一个项目符号列表。每个级别都有一个名称字段和一个子字段(最低级别除外)。我尝试过使用递归来实现它,但遇到了一个问题。除最后一级外,仅显示第一个子级。我有一种感觉,我的一些递归调用可能没有正确返回。以下是我目前掌握的代码:Javascript 从JSON数据创建HTML项目符号列表时出现问题,javascript,html,json,recursion,Javascript,Html,Json,Recursion,我有一些JSON,我想把它们交给一个项目符号列表。每个级别都有一个名称字段和一个子字段(最低级别除外)。我尝试过使用递归来实现它,但遇到了一个问题。除最后一级外,仅显示第一个子级。我有一种感觉,我的一些递归调用可能没有正确返回。以下是我目前掌握的代码: function load_menu(){ json_text=ajax_get("example.json"); json_tree=JSON.parse(json_text); write_menu(json_tree
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,看起来还可以,所以我想递归肯定有问题。有人能帮我吗?如果你为(i…编写,JS解释器将创建一个新变量i
,如果不存在,或者重用一个现有变量(如果存在)。这就是问题所在,因为在每个递归级别中都需要新的循环变量
因此,解决方案是通过为每个级别编写来强制创建变量(var i.
相反。json.length'返回什么?根据示例输出,它看起来将返回而不是您期望的2。编辑:在进一步调查中,i
设置为0
将小于json。length
始终如此,它将只返回一次,不是吗?您可以尝试为(变量i…
而不是(i..。当你像这样递归时,函数可能会重用相同的i
。给我们你的示例JSON输入。Lister,我被设置为0,所以即使它继续i
,它也会被重置i=0
。@Interstarr\u Coder这正是问题所在,内部递归循环正在干扰外部递归的计数器。@InterseLalar_Coder是的,在“级别3,2”之后,我是2,即使它仍然应该是0(因为你还没有完成级别1)