树形菜单制作

简介: 树形菜单制作

运用 递归函数方法制作

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
  </head>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    .side-menu {
      width: 300px;
      border: 1px solid #ddd;
    }
    .side-menu ul li {
      list-style: none;
    }
    .side-menu ul li a {
      display: block;
      text-decoration: none;
      color: #222;
      border-bottom: 1px solid #ddd;
    }
    .subnav {
      display: none;
    }
  </style>
  <body>
    <div class="side-menu"></div>
  </body>
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  <script>
    $(function() {
      $.ajax({
        type: "GET",
        url: "./1.JSON",
        dataType: "json",
        success: function(res) {
          let dataArr = res;
          let liStr = "";
          let oUl = $("<ul></ul>");
          let num = 5;
          if (dataArr.length > 0) {
            num += 5;
            for (var i = 0; i < dataArr.length; i++) {
              if (dataArr[i].childMenu != null && dataArr[i].childMenu.length > 0) { //有子菜单
                liStr += "<li><a href=\"" + dataArr[i].href + "\"><i class=\"" + dataArr[
                    i].Left + "\"></i>" + dataArr[i].name + "<i class=\"" + dataArr[i]
                  .Right + "\"></i></a><ul class=\"subnav\">";
                for (var j = 0; j < dataArr[i].childMenu.length; j++) {
                  liStr += getChildMenu(dataArr[i].childMenu[j], num);
                }
                liStr += "</ul></li>";
              } else { //没有子菜单
                liStr += "<li><a href=\"" + dataArr[i].href + "\"><i class=\"" + dataArr[
                    i].Left + "\"></i>" + dataArr[i].name + "<i class=\"" + dataArr[i]
                  .Right + "\"></i></a></li>";
              }
            }
            oUl.html(liStr);
            $(".side-menu").append(oUl);
          }
        }
      })
      function getChildMenu(dataArr, num) { //递归创建子菜单
        let subStr = "";
        num += 10;
        if (dataArr.childMenu != null && dataArr.childMenu.length > 0) { //有子菜单
          subStr += "<li><a style=\"padding-left:" + num + "px;\" href=\"" + dataArr.href +
            "\"><i class=\"" + dataArr.Left + "\"></i>" + dataArr.name + "<i class=\"" + dataArr.Right +
            "\"></i></a><ul class=\"subnav\">";
          for (var j = 0; j < dataArr.childMenu.length; j++) {
            subStr += getChildMenu(dataArr.childMenu[j], num);
          }
          subStr += "</ul></li>";
        } else { //无子菜单
          subStr += "<li><a  style=\"padding-left:" + num + "px;\" href=\"" + dataArr.href +
            "\"><i class=\"" + DataTransfer.Left + "\"></i>" + dataArr.name + "<i class=\"" + dataArr
            .Right + "\"></i></a></li>";
        }
        return subStr;
      }
      (function SideMenuHandle() {
        $('.side-menu').on("click", "li", function(event) {
          event.stopPropagation();
          // console.log($(this).find(".subnav").length)
          if ($(this).find(".subnav").eq(0).is(":hidden")) {
            $(this).find(".subnav").eq(0).show();
          } else {
            $(this).find(".subnav").eq(0).hide();
          }
        })
      })();
    })
  </script>
</html>

制作做效果如下只是简易效果

f4061b6cf8e04542b184c0062fec131b.png


相关文章
|
存储 前端开发 JavaScript
HTML+CSS+JS轮播图制作(前端)
HTML+CSS+JS轮播图制作(前端)
176 0
|
JavaScript 前端开发
原生js制作选项卡详解,适合无基础的人学习
原生js制作选项卡详解,适合无基础的人学习
141 0
原生js制作选项卡详解,适合无基础的人学习
|
存储 前端开发 JavaScript
|
开发者
幻灯片和图集|学习笔记
快速学习幻灯片和图集
幻灯片和图集|学习笔记
|
开发者
幻灯片与图集| 学习笔记
快速学习幻灯片与图集。
|
前端开发 iOS开发
字体图标制作的方法
web端和移动端为什么需要做字体图标? 性能好是最主要的原因,可以减少http请求。在之前项目中,网页的图标是用的图片,当图标很多时,http请求多,而且图片体积比较大。   字体图标制作流程 1设计师设计出图标保存为SVG格式的。
1628 0
|
JavaScript 前端开发 BI
三级侧边栏-树形菜单案例效果
效果图: 本次制作要点:   html: 结构上,要把li内部的文字和待展开的元素分开来,便于后期样式上的把控和逻辑上的处理。 1 2 3 个人报表 4 5 今日报表 6 ...
999 0