JavaScript递归算法生成树形菜单


Posted in Javascript onAugust 15, 2017

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

1、最终效果图(这里仅为实现算法,并加载至页面,不做任何css界面优化)

JavaScript递归算法生成树形菜单

注释:本示例包含三级目录菜单,但实际上可支持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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript cookie操作类的实现代码小结附使用方法
Jun 02 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
May 24 Javascript
javascript开发技术大全-第3章 js数据类型
Jul 03 Javascript
Extjs4 类的定义和扩展实例
Jun 28 Javascript
js转义字符介绍
Nov 05 Javascript
javascript手风琴下拉菜单实现代码
Nov 12 Javascript
Angular4学习教程之HTML属性绑定的方法
Jan 04 Javascript
Vue 去除路径中的#号
Apr 19 Javascript
Vue组件模板及组件互相引用代码实例
Mar 11 Javascript
js实现小时钟效果
Mar 25 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 Javascript
关于对TypeScript泛型参数的默认值理解
Jul 15 Javascript
JavaScript中附件预览功能实现详解(推荐)
Aug 15 #Javascript
input输入框内容实时监测(附代码)
Aug 15 #Javascript
vue的基本用法与常见指令
Aug 15 #Javascript
vue如何集成raphael.js中国地图的方法示例
Aug 15 #Javascript
JavaScript与Java正则表达式写法的区别介绍
Aug 15 #Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
Aug 15 #Javascript
form表单序列化详解(推荐)
Aug 15 #Javascript
You might like
phpwind中的数据库操作类
2007/01/02 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
使用python进行广告点击率的预测的实现
2019/07/04 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
商务英语广告词大全
2014/03/18 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
春晚观后感
2015/06/11 职场文书
企业财务管理制度范本
2015/08/04 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
anaconda python3.8安装后降级
2021/06/11 Python
使用HttpSessionListener监听器实战
2022/03/17 Java/Android
Python Numpy库的超详细教程
2022/04/06 Python