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 深拷贝函数
Dec 04 Javascript
JS Map 和 List 的简单实现代码
Jul 08 Javascript
jQuery中ajax的get()方法用法实例
Dec 26 Javascript
JavaScript实现在标题栏上显示当前日期的方法
Mar 19 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
详解Angular2中的编程对象Observable
Sep 17 Javascript
vue2 router 动态传参,多个参数的实例
Nov 10 Javascript
Angular4 组件通讯方法大全(推荐)
Jul 12 Javascript
原生javascript实现连连看游戏
Jan 03 Javascript
在小程序中推送模板消息的实现方法
Jul 22 Javascript
Vue的状态管理vuex使用方法详解
Feb 05 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
Jul 13 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
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
jQuery+ajax实现用户登录验证
2020/09/13 jQuery
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
python原始套接字编程示例分享
2014/02/21 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
python 如何在测试中使用 Mock
2021/03/01 Python
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
行政管理人员精品工作推荐信
2013/11/04 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
大学三年计划书范文
2014/04/30 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
企业培训简报范文
2015/07/20 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python