$(function () {
var data;
$.getJSON("menu.json", function(data){
//console.log(data);
//console.log(data.menu);
//console.log(data.menu.length);
//console.log(data.menu[1].link);
//getMenuItem(data);
var $menu = $("#menu");
console.log($menu);
console.log(this);
console.log(data)
$.each(data.menu, function () {
$menu.append(getMenuItem(data));
//console.log(this);
});
// //$menu.menu();
//getMenuItem(data);
});
function getMenuItem(data) {
var i = 0;
while(i<data.menu.length){
var item = $("<li>").append($("<a>",
{
href: '#' + data.menu[i].link,
html: data.menu[i].name
}));
//console.log(data.menu[i]);
if (data.sub) {
var subList = $("<ul>");
$.each(data.sub, function () {
subList.append(getMenuItem(this));
// //console.log(this);
// //console.log(subList);
});
item.append(subList);
// //console.log
}
i+=1;
console.log(i);
return item;
}
}
/*optional stuff to do after success */
// console.log(data);
// console.log(jsonD);
// for(i=0;i<data.menu.length;i++){
// console.log(data.menu[i].sub);
// }
});
这是我的js(jquery)文件。我试图从位于本地的json文件中获取数据。这是一个多级列表。当我运行代码时,它不会获取整个json数据,而只获取列表中的第一个项目。有人可以帮忙吗?
这里也是我的json文件
{
"menu" : [{
"name": "Croatia",
"link": "0",
"sub": null
}, {
"name": "England",
"link": "1",
"sub": [{
"name": "Arsenal",
"link": "0-0",
"sub": null
}, {
"name": "Liverpool",
"link": "0-1",
"sub": null
}, {
"name": "Manchester United",
"link": "0-2",
"sub": null
}]
}, {
"name": "Spain",
"link": "2",
"sub": [{
"name": "Barcelona",
"link": "2-0",
"sub": null
}, {
"name": "Real Madrid",
"link": "2-1",
"sub": null
}]
}, {
"name": "Germany",
"link": "3",
"sub": [{
"name": "Bayern Munich",
"link": "3-1",
"sub": null
}, {
"name": "Borrusia Dortmund",
"link": "3-2",
"sub": null
}]
}]
}
P.S #menu是ul,请在jquery中回答
答案 0 :(得分:2)
在第一个each
内,不要将data
数组传递给getMenuItem()
,只需传入对象实例,方法与递归调用getMenuItem(this)
<的方式相同/ p>
然后删除while()
循环
// loop over array
$.each(data.menu, function(i, item) {
// get menu item for each object instance
$menu.append(getMenuItem(this));
});
function getMenuItem(obj) {
var item = $("<li>").append($("<a>", {
href: '#' + obj.link,
html: obj.name
}));
if (obj.sub) {
var subList = $("<ul>");
$.each(obj.sub, function() {
subList.append(getMenuItem(this));
});
item.append(subList);
}
return item;
}
的 DEMO 强>