本文实例为大家分享了js生成树形菜单的具体代码,供大家参考,具体内容如下

1、最终效果图(这里仅为实现算法,并加载至页面,不做任何css界面优化)
注释:本示例包含三级目录菜单,但实际上可支持N级(可使用该代码自行测试)
2、数据源
菜单信息一般来源于数据库中数据表,且为自连接表,其中包含主要字段(主键,菜单名称,父级id);
本示例在前端页面中使用对象数组模拟从数据库获取菜单信息;
var menuArry = [
{ id: 1, name: "办公管理", pid: 0 },
{ id: 2, name: "请假申请", pid: 1 },
{ id: 3, name: "出差申请", pid: 1 },
{ id: 4, name: "请假记录", pid: 2 },
{ id: 5, name: "系统设置", pid: 0 },
{ id: 6, name: "权限管理", pid: 5 },
{ id: 7, name: "用户角色", pid: 6 },
{ id: 8, name: "菜单设置", pid: 6 },
];
注释:id——菜单主键id;name——菜单名称;pid——父级id
3、程序设计
菜单信息一般来源
//菜单列表html
var menus = '';
//根据菜单主键id生成菜单列表html
//id:菜单主键id
//arry:菜单数组信息
function GetData(id, arry) {
var childArry = GetParentArry(id, arry);
if (childArry.length > 0) {
menus += '<ul>';
for (var i in childArry) {
menus += '<li>' + childArry[i].name;
GetData(childArry[i].id, arry);
menus += '</li>';
}
menus += '</ul>';
}
}
//根据菜单主键id获取下级菜单
//id:菜单主键id
//arry:菜单数组信息
function GetParentArry(id, arry) {
var newArry = new Array();
for (var i in arry) {
if (arry[i].pid == id)
newArry.push(arry[i]);
}
return newArry;
}
注释:本示例菜单使用ul无序列表演示,menus变量为最终生成的菜单html
4、运行
GetData(0, menuArry)
$("body").append(menus);
注释:GetData(0, menuArry),0——顶级菜单主键
5、完整代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="jquery-1.8.3.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(function () {
var menuArry = [
{ id: 1, name: "办公管理", pid: 0 },
{ id: 2, name: "请假申请", pid: 1 },
{ id: 3, name: "出差申请", pid: 1 },
{ id: 4, name: "请假记录", pid: 2 },
{ id: 5, name: "系统设置", pid: 0 },
{ id: 6, name: "权限管理", pid: 5 },
{ id: 7, name: "用户角色", pid: 6 },
{ id: 8, name: "菜单设置", pid: 6 },
];
GetData(0, menuArry)
$("body").append(menus);
});
//菜单列表html
var menus = '';
//根据菜单主键id生成菜单列表html
//id:菜单主键id
//arry:菜单数组信息
function GetData(id, arry) {
var childArry = GetParentArry(id, arry);
if (childArry.length > 0) {
menus += '<ul>';
for (var i in childArry) {
menus += '<li>' + childArry[i].name;
GetData(childArry[i].id, arry);
menus += '</li>';
}
menus += '</ul>';
}
}
//根据菜单主键id获取下级菜单
//id:菜单主键id
//arry:菜单数组信息
function GetParentArry(id, arry) {
var newArry = new Array();
for (var i in arry) {
if (arry[i].pid == id)
newArry.push(arry[i]);
}
return newArry;
}
</script>
</body>
</html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 递归算法
# 树形菜单
# 一个简单的js树形菜单
# JS实现无限级网页折叠菜单(类似树形菜单)效果代码
# JavaScript实现简单的树形菜单效果
# javascript动态生成树形菜单的方法
# javascript 树形导航菜单实例代码
# javascript实现树形菜单的方法
# JavaScript树形菜单功能实现方法总结
# 主键
# 系统设置
# 仅为
# 不做
# 大家分享
# 数据库中
# 程序设计
# 具体内容
# 大家多多
# 量为
# 其中包含
# 加载
# src
# var
# menuArry
# pid
# jquery
# GetData
# childArry
# GetParentArry
相关文章:
专业公司网站制作公司,用什么语言做企业网站比较好?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
网站制作报价单模板图片,小松挖机官方网站报价?
如何快速查询网站的真实建站时间?
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站为何优先选择香港服务器?
,怎么在广州志愿者网站注册?
建站org新手必看:2024最新搭建流程与模板选择技巧
建站DNS解析失败?如何正确配置域名服务器?
网站制作的步骤包括,正确网址格式怎么写?
如何配置支付宝与微信支付功能?
如何高效利用200m空间完成建站?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何设计高效校园网站?
简单实现Android文件上传
javascript基本数据类型及类型检测常用方法小结
如何选择高效稳定的ISP建站解决方案?
建站之星多图banner生成与模板自定义指南
如何高效利用亚马逊云主机搭建企业网站?
如何做网站制作流程,*游戏网站怎么搭建?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
如何在Windows服务器上快速搭建网站?
Python路径拼接规范_跨平台处理说明【指导】
Swift开发中switch语句值绑定模式
建站之星在线版空间:自助建站+智能模板一键生成方案
建站之星3.0如何解决常见操作问题?
如何撰写建站申请书?关键要点有哪些?
外贸公司网站制作哪家好,maersk船公司官网?
建站VPS能否同时实现高效与安全翻墙?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
已有域名和空间如何快速搭建网站?
如何续费美橙建站之星域名及服务?
如何快速使用云服务器搭建个人网站?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
建站主机是否属于云主机类型?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
宝塔新建站点为何无法访问?如何排查?
如何通过云梦建站系统实现SEO快速优化?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何自定义建站之星模板颜色并下载新样式?
网站制作公司排行榜,抖音怎样做个人官方网站
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
c# 服务器GC和工作站GC的区别和设置
高防服务器租用如何选择配置与防御等级?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
山东云建站价格为何差异显著?
网页设计与网站制作内容,怎样注册网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。