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 相关文章推荐
让textarea控件的滚动条怎是位与最下方
Apr 20 Javascript
使用js对select动态添加和删除OPTION示例代码
Aug 12 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
jQuery中eq()方法用法实例
Jan 05 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
May 04 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
javascript实现的网站访问量统计代码
Dec 20 Javascript
js实现div模拟模态对话框展现URL内容
May 27 Javascript
js省市区级联查询(插件版&amp;无插件版)
Mar 21 Javascript
微信小程序实现长按删除图片的示例
May 18 Javascript
Vue源码解析之数据响应系统的使用
Apr 24 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 jQuery
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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
PHP编码转换
2012/11/05 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
php实现两个数组相加的方法
2015/02/17 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
js下弹出窗口的变通
2007/04/18 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
Python实现的knn算法示例
2018/06/14 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
python add_argument()用法解析
2020/01/29 Python
python实现打砖块游戏
2020/02/25 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
安全生产汇报材料
2014/02/17 职场文书
廉政承诺书
2015/01/19 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS