全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript递归算法生成树形菜单

本文实例为大家分享了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小时内与您取得联系。