我正在使用以下代码创建一个列表,该列表包含在this fiddle。
中<ul></ul>
var myList = [{
"title": "Home",
"sub": 0,
"url": "/home",
"show": 1
}, {
"title": "News",
"sub": 0,
"url": "/news",
"show": 1
}, {
"title": "About",
"sub": 1,
"url": "/about",
"show": 1,
child: [{
"title": "Contact",
"sub": 0,
"url": "/about/contact",
"show": 1
}]
}, {
"title": "Other",
"sub": 0,
"url": "/other",
"show": 0
}];
$.each(myList, function (entryIndex, entry) {
var title = this.title;
var show = "";
var sub = '';
var url = this.url;
if (!this.show) {
show = "style=color:grey;";
}
if (this.sub) {
sub = $("ul").append(this.child.text);
console.log(sub);
}
$("ul").append("<li " + show + "> " + title + sub + "</li>");
});
我得到的输出是,除了大概的孩子之外,它正在按预期工作。
<ul>
<li> Home</li>
<li> News</li>
<li> About[object Object]</li>
<li style="color:grey;"> Other</li>
</ul>
如何让孩子出现,以便我
<ul>
<li> Home</li>
<li> News</li>
<li> About
<ul>
<li> Contact</li>
</ul>
</li>
<li style="color:grey;"> Other</li>
</ul>
答案 0 :(得分:2)
尝试这样的事情:
<强> Online Demo 强>
$(document).on('ready',function(){
var data = [{/*... your data*/}] ;
var endMenu =getMenu(data);
function getMenu(d ){
return d.map(function(node){
var subMenu = ( node.child && node.child.length > 0) ? '<ul>'+ getMenu(node.child) + '</ul>' : "";
return '<li>'+node.title + subMenu + '</li>' ;
});
}
$('#menu').html('<ul>'+endMenu.join('')+ '</ul>');
});
您所要做的就是检查您的对象是否有child
个项目,以及您是否再次执行该功能getMenu(node.child)
,如:
var subMenu = ( node.child && node.child.length > 0) ? '<ul>'+ getMenu(node.child) + '</ul>' : "";
希望这将指导您在您的版本中实现它。