Javascript:通过递归迭代对象来构建导航列表
Javascript: iterate through object with recursion to build navigation list
如何使用以下对象构建多级导航。
var obj = {
1:{
title: "title1",
link: "link1"
},
2:{
title: "title2",
link: "link2",
1:{
title: "title21",
link: "link21"
},
2:{
title: "title22",
link: "link22"
}
}
}
我能够得到下面的结果,但我得到双倍,因为每个对象内部的两个对象属性。
function menuWalker(obj) {
var html = '<ul>';
for (var property in obj){
if (obj.hasOwnProperty(property)) {
html += '<li>';
console.log(obj[property]);
if (typeof obj[property] == "object"){
html += '<a href="' + obj[property].link + '">' + obj[property].title + '</a>';
html += menuWalker(obj[property]);
}else{
html += '<a href="' + obj.link + '">' + obj.title + '</a>';
}
html += '</li>';
}
}
html += '</ul>';
return html;
}
当前Html结果:
- title1
- title1
- title1
- title2
- title21
- title21
- title21
- title22
- title22
- title22
- title2
- title2
- title21
如果您可以控制导航数据的结构,我建议如下。通过这种方式,您可以明确定义导航项是否有子项,并使所有内容更清晰。
数据var obj = [
{
title: "title1",
link: "link1",
children: []
},
{
title: "title2",
link: "link2",
children: [
{
title: "title21",
link: "link21"
},
{
title: "title22",
link: "link22"
}
]
}
];
沃克function menuWalker(obj) {
var html = '<ul>';
for (var property in obj){
if (obj.hasOwnProperty(property)) {
html += '<li>';
html += '<a href="' + obj[property].link + '">' + obj[property].title + '</a>';
if (obj[property].children && obj[property].children.length > 0){
html += menuWalker(obj[property].children);
}
html += '</li>';
}
}
html += '</ul>';
return html;
}
如果你已经控制了导航数据的结构,你就可以实现Nerdwood的答案。
但如果你没有控制,你可以试试:
沃克function menuWalker(obj) {
var html = '<ul>';
for (var property in obj) {
if (obj.hasOwnProperty(property) && typeof obj[property] == "object") {
html += '<li>' + childrenMenuWalker(obj[property]) + '</li>';
}
}
html += '</ul>';
return html;
}
function childrenMenuWalker(obj) {
var html = '';
if (obj.hasOwnProperty('title') && obj.hasOwnProperty('link')) {
html += '<a href="' + obj.link + '">' + obj.title + '</a>';
}
var hasChildren = false;
var childrenHtml = '<ul>';
for (var property in obj) {
if (obj.hasOwnProperty(property) && typeof obj[property] == "object") {
hasChildren = true;
childrenHtml += '<li>' + childrenMenuWalker(obj[property]) + '</li>';
}
}
childrenHtml += '</ul>';
if (hasChildren) {
html += childrenHtml;
}
return html;
}
相关文章:
- 我应该如何从xml文件构建一个javascript页面
- 单击顶部导航时如何进行向下滚动效果(向下滑动).
- angular 1.5应用程序中的导航栏
- 如何在DOM元素上按类型构建此函数
- 无法从jquery Mobile导航栏重定向到另一个页面
- Sencha Touch构建-排除文件
- RubyonRails——构建交互式接口应该朝哪个方向发展
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 导航到特定事件的另一个变量页面
- MVC 3页面导航和使用javascript传递参数
- 有没有一种方法可以基于Angular 2中注册的路线构建动态导航/菜单
- 如何使用引导导航栏构建我的流星烈焰 UI
- 如何构建雅虎风格的导航栏
- 在一个用一个长的垂直页面构建的网站上,我如何在向下滚动到底部的同时保持导航栏在顶部
- 哈希导航URL构建
- Javascript:通过递归迭代对象来构建导航列表
- 使用片段标识符构建无重定向导航
- Jquery:构建包含页面在内的导航
- 构建拖放导航选项卡
- 构建当前以类别为中心的导航