JS递归遍历Json数组,使其变成具有父子结构的layui导航栏

使用JS递归遍历Json数组,并使其具有父子结构

这里笔者使用layui框架搭建垂直导航栏
原始数据如下:

var arr = [
	{menuId:xx1, pMenuId:"000000", url:'/pages/xx1.html', title:'首页', icon="icon-home"},
	{menuId:xx2, pMenuId:"000000", url:'/pages/xx2.html', title:'人员', icon="icon-people"},
	{menuId:xx3, pMenuId:xx2, url:'/pages/xx3.html', title:'新增人员', icon="icon-addPeople"},
	{menuId:xx4, pMenuId:"000000", url:'/pages/xx4.html', title:'统计', icon="icon-cal"},
	{menuId:xx5, pMenuId:xx4, url:'/pages/xx5.html', title:'大区统计', icon="icon-dqtotal"},
	{menuId:xx6, pMenuId:xx5, url:'/pages/xx6.html', title:'华东大区', icon="icon-huadong"},
	......
];

递归方法

var getChildren = function(data,root){
	var items = [];
	for(var i = 0; i < data.length; i++){
		if(root == data[i].pMenuId){
			data[i].items = getChildren(data,data[i].menuId);
			
			// 把数据封装为 layui构建导航栏所需的items
			var temp_item={
				key:data[i].menuId,
				title:data[i].menuName,
				iconClass:data[i].icon,
				href:data[i].url,
				items:data[i].items
			}
			items.push(temp_item);
		}
	}
	return items;
}

// 或者直接遍历data中的数据 看需求选择 其实这种更方便。
/*
$(data).each(function() {
	if (this.menuLevel == '1') {
		menu[this.menuId] = [];
	} else {
		if (menu[this.pMenuId])
			menu[this.pMenuId].push(this);
	}
});
*/

// 0 是因为 父节点的pid="000000"  把数组中的节点关系变成json格式的数组
var data_items = getChildren(arr,0);
// 最终得到的数据是具有父子结构的json数组。

结果数据

data_items:[
{menuId:xx1, pMenuId:"000000", url:'/pages/xx1.html', title:'首页', icon="icon-home"},
{menuId:xx2, pMenuId:"000000", url:'/pages/xx2.html',title:'人员', icon="icon-people", 
 	items:[{
 		menuId:xx3, pMenuId:xx2, url:'/pages/xx3.html', title:'新增人员', icon="icon-addPeople"
 	}]
 },
{menuId:xx4, pMenuId:"000000", url:'/pages/xx4.html', title:'统计', icon="icon-cal" 
	items:[{
		menuId:xx5, pMenuId:xx4, url:'/pages/xx5.html', title:'大区统计', icon="icon-dqtotal" ,
		items:[{
			menuId:xx6, pMenuId:xx5, url:'/pages/xx6.html', title:'华东大区', icon="icon-huadong"	
		}]
    }]
},
]

// 最后使用layui自带的方法构建 导航栏
layui.use(['jquery', 'menu', 'fixbar'], function () {
	var $ = layui.$;
	$(document).ready(function () {
		var nav = layui.menu.render({
			elem: "#menu",
			//type: 'nav',
			theme: 'dark',
			width: 250,
			autoNav: false,
			onClick: function (item) {
				 if (item.href) {
                     if (item.target) {
                         window.open(item.href);
                     } else {
                         $('#iframe').attr('src', item.href);
                     }
                 }
			},
			items:data_items,
		}); 
	});
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值