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 相关文章推荐
js获取单选按钮的数据
Nov 27 Javascript
通过 Dom 方法提高 innerHTML 性能
Mar 26 Javascript
JavaScript splice()方法详解
Sep 22 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
JS实现在网页中弹出一个输入框的方法
Mar 03 Javascript
Jsonp post 跨域方案
Jul 06 Javascript
Javascript实现快速排序(Quicksort)的算法详解
Sep 06 Javascript
JS正则子匹配实例分析
Dec 22 Javascript
详解jQuery中ajax.load()方法
Jan 25 Javascript
ES6生成器用法实例分析
Apr 10 Javascript
Vue打包后出现一些map文件的解决方法
Feb 13 Javascript
JavaScript Dom实现轮播图原理和实例
Feb 19 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
PHP+ACCESS 文章管理程序代码
2010/06/21 PHP
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
小程序云开发实战小结
2018/10/25 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python爬取淘宝商品详情页数据
2018/02/23 Python
python实现飞机大战
2018/09/11 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
生产内勤岗位职责
2013/12/07 职场文书
工作会议欢迎词
2014/01/16 职场文书
策划总监岗位职责
2014/02/16 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
物业工程部岗位职责
2015/02/11 职场文书
自主招生自荐信范文
2015/03/04 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript