JS无限级导航菜单实现方法


Posted in Javascript onJanuary 05, 2019

这里使用layui渲染的导航

实体类

dept.java

private int id; //id
  private String dept_name;  //部门名称
  private int pid;  //上级部门id
  private int sort_num;  //排序值
  private int create_id; //创建人
  private String create_time; //创建时间
  private int modify_id; //修改人
  private String modify_time; //最后修改时间
  private int is_del; // 是否删除 0 未删除 1 已删除
  private int status; //status
  private String remark; //remark
  private List<Dept> deptChild = new ArrayList<>(); //部门迭代

DeptMapper.java

List<Dept> selectDeptForJsonMenu();

DeptMapper.xml

<resultMap type="com.ys.entity.Dept" id="deptFirst">
    <result column="id" property="id" javaType="java.lang.Integer" />
    <result column="dept_name" property="dept_name" javaType="java.lang.String" />
    <result column="sort_num" property="sort_num" javaType="java.lang.Integer" />
    <result column="create_time" property="create_time" javaType="java.lang.String" />
    <result column="modify_id" property="modify_id" javaType="java.lang.Integer" />
    <result column="modify_time" property="modify_time" javaType="java.lang.String" />
    <result column="is_del" property="is_del" javaType="java.lang.Integer" />
    <result column="status" property="status" javaType="java.lang.Integer" />
    <result column="remark" property="remark" javaType="java.lang.String" />
    <collection column="id" property="deptChild" javaType="java.util.ArrayList" select="selectDeptForJsonMenuChild"/>
  </resultMap>
  <!-- 查询部门菜单树 -->
  <select id="selectDeptForJsonMenu" resultMap="deptFirst">
    SELECT * FROM sys_dept WHERE pid = 0 AND is_del = 0 ORDER BY sort_num
  </select>
  <select id="selectDeptForJsonMenuChild" resultMap="deptFirst" parameterType="java.lang.Integer">
    select * FROM sys_dept where pid = #{id} AND is_del = 0 ORDER BY sort_num
  </select>

DeptService.java

public List<Dept> selectDeptForJsonMenu(){
    return mapper.selectDeptForJsonMenu();
  }

DeptController.java

@RequestMapping(value = "selectDeptForJsonMenu",method={RequestMethod.GET,RequestMethod.POST})
  @ResponseBody
  public List<Dept> selectDeptForJsonMenu(){
    return service.selectDeptForJsonMenu();
  }

html 引入layui.js,layui.css 并加载element模块.

<div id="leftMenu">
</div>
$(function(){
  $.ajax({
    method:'post',
    url:getPath+"dept/selectDeptForJsonMenu",
    dataType:'json',
    success:function(data){
      if(data.length > 0){
        var showlist = $('<ul class="layui-nav layui-nav-tree"></ul>');
        showall(data, showlist);
        $("#leftMenu").html(showlist);
      }else{ 
        $('#leftMenu').html('<span class="layui-btn layui-btn-primary" id="add">添加</span>') ; 
      }
    }
  });
  //json为json数据
  //parent为最终html拼接内容
  function showall(json, parent) {
    for (var i in json) {
      //有子节点 遍历
      if (json[i].deptChild.length > 0) {
        //创建li
        var li = $('<li class="layui-nav-item layui-nav-itemed"></li>');
        $(li).append('<a href="javascript:;" rel="external nofollow" rel="external nofollow" >'+json[i].dept_name+'</a>');
        $(li).append('<ul class="layui-nav-child"></ul>').appendTo(parent);
        //将UL选中 回调
        showall(json[i].deptChild, $(li).children().eq(1));
      }
      //无子级
      else {
        $('<li></li>').append('<a href="javascript:;" rel="external nofollow" rel="external nofollow" >'+json[i].dept_name+'</a>').appendTo(parent);
      }
    }
  }
});

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Javascript 相关文章推荐
javascript 动态设置已知select的option的value值的代码
Dec 16 Javascript
javascript dom代码应用 简单的相册[firefox only]
Jun 12 Javascript
Javascript call和apply区别及使用方法
Nov 14 Javascript
基于js与flash实现的网站flv视频播放插件代码
Oct 14 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
js命名空间写法示例
Dec 18 Javascript
详解JavaScript调用栈、尾递归和手动优化
Jun 03 Javascript
vue 怎么创建组件及组件使用方法
Jul 27 Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 Javascript
element-ui table span-method(行合并)的实现代码
Dec 20 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
Dec 30 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
JSON字符串操作移除空串更改key/value的介绍
Jan 05 #Javascript
JavaScript常见事件对象与操作实例总结
Jan 05 #Javascript
JavaScript常见事件处理程序实例总结
Jan 05 #Javascript
JavaScript代码调试方法实例小结
Jan 05 #Javascript
JavaScript实现连连看连线算法
Jan 05 #Javascript
JavaScript错误处理操作实例详解
Jan 04 #Javascript
JSON基本语法及与JavaScript的异同实例分析
Jan 04 #Javascript
You might like
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
2015/12/03 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
详解Python中最难理解的点-装饰器
2017/04/03 Python
Python while true实现爬虫定时任务
2020/06/08 Python
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
写好自荐信的要点
2013/11/06 职场文书
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
促销活动总结怎么写
2014/06/25 职场文书
文体活动总结
2015/02/04 职场文书
老员工辞职信范文
2015/05/12 职场文书
Windows server 2012搭建FTP服务器
2022/04/29 Servers