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 select的操作实现代码
May 06 Javascript
jquery1.4 教程二 ajax方法的改进
Feb 25 Javascript
js验证输入是否为手机号码或电话号码示例
Dec 30 Javascript
javascript生成随机数的方法
May 16 Javascript
JQuery CheckBox(复选框)操作方法汇总
Apr 15 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
Dec 17 Javascript
JavaScript简单实现弹出拖拽窗口(一)
Jun 17 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
Dec 19 Javascript
Bootstrap popover用法详解
Dec 22 Javascript
深入理解Vue 的条件渲染和列表渲染
Sep 01 Javascript
node微信开发之获取access_token+自定义菜单
Mar 17 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
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
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
python使用tkinter实现简单计算器
2018/01/30 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
Python urllib2运行过程原理解析
2020/06/04 Python
零基础小白多久能学会python
2020/06/22 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
高三自我鉴定范文
2013/10/19 职场文书
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
员工安全生产承诺书
2014/05/22 职场文书
个人存款证明书
2014/10/18 职场文书
发布会邀请函
2015/01/31 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
黑白记忆观后感
2015/06/18 职场文书
MySQL常用慢查询分析工具详解
2022/08/14 MySQL