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 相关文章推荐
jquery showModelDialog的使用方法示例详解
Nov 19 Javascript
javascript贪吃蛇完整版(源码)
Dec 09 Javascript
js实现登陆遮罩效果的方法
Jul 28 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
Oct 12 Javascript
jquery中ajax跨域方法实例分析
Dec 18 Javascript
Three.js学习之网格
Aug 10 Javascript
jQuery简单实现中间浮窗效果
Sep 04 Javascript
AngularJS 过滤与排序详解及实例代码
Sep 14 Javascript
微信小程序实现表单校验功能
Mar 30 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
Feb 23 Javascript
Vue.js 中的 v-cloak 指令及使用详解
Nov 19 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
May 09 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
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
php统计数组元素个数的方法
2015/07/02 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
微信小程序实现点击生成随机验证码
2020/09/09 Javascript
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
python随机数分布random测试
2018/08/27 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
python 贪心算法的实现
2020/09/18 Python
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
地球一小时倡议书
2014/04/15 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
社会发展项目建议书
2014/08/25 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
2014年绿化工作总结
2014/12/09 职场文书