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 相关文章推荐
Firefox window.close()的使用注意事项
Apr 11 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
javascript表单验证 - Parsley.js使用和配置
Jan 25 Javascript
Bootstrap模态窗口源码解析
Feb 08 Javascript
Vue.js实战之利用vue-router实现跳转页面
Apr 01 Javascript
JS一个简单的注册页面实例
Sep 05 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
May 05 Javascript
Typescript的三种运行方式(小结)
Sep 18 Javascript
vue实现文字加密功能
Sep 27 Javascript
vue和iview实现Scroll 数据无限滚动功能
Oct 31 Javascript
Vue 的双向绑定原理与用法揭秘
May 06 Javascript
JavaScript设计模式之策略模式实现原理详解
May 29 Javascript
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时间格式控制符对照表分享
2013/07/23 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
js获取视频时长代码
2014/04/10 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
简单实现js浮动框
2016/12/13 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
用python找出那些被“标记”的照片
2017/04/20 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
在python中安装basemap的教程
2018/09/20 Python
python 搜索大文件的实例代码
2019/07/08 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
wxPython实现列表增删改查功能
2019/11/19 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
员工考核评语大全
2014/04/26 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android