js递归树形菜单

简介: js递归树形菜单

这里我是用的json数据,样式数组包对象,对象里再包数组对象这样写,页面只需要一个空的div就可以实现

JS

<script>
      //json数据传输
      let data;
      let xhr = new XMLHttpRequest();
      xhr.open('get', 'js/树形菜单.json');
      xhr.send();
      xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
          let text = xhr.responseText;
          data = JSON.parse(text);
          show(data);//调用传参
          // console.log(data);
        }
      }
      //获取元素
      let box = document.getElementsByClassName('box')[0];
      //设置一个变量为空
      let str = '';
      // 设置变量默认为真
      let statuss = true;
      function show(data) {
        //判断如果是真
        if (statuss) {
          //拼接ul
          str += '<ul>';
          //否则让ul隐藏
        } else {
          str += '<ul style="display:none">';
        }
        //循环数据
        for (let i = 0; i < data.length; i++) {
          //拼接type里的内容
          str += '<li>' + data[i].type + '</li>';
          //判断是不是元素的子元素
          if (data[i].children) {
            //是的话变量为false
            statuss = false;
            //自调用函数
            show(data[i].children);
            //否则拼接ul标签
          } else {
            str += '<ul></ul>';
          }
          // str += '</li>';
        }
        //闭合标签
        str += '</ul>';
        //输出到页面中
        box.innerHTML = str;
        // console.log(str);
        //返回str的值
        return str;
      }
      // let box = document.getElementById("box");
      box.addEventListener("click", function(e) {
        let targets = e.target;
        console.log(targets);
        if (targets.nodeName === "LI") {
          let nexts = targets.nextElementSibling;
          if (nexts.nodeName === "UL") {
            if (nexts.style.display == "none") {
              nexts.style.display = "block";
            } else {
              nexts.style.display = "none";
            }
          }
        }
      })
    </script>
相关文章
|
3月前
|
JSON JavaScript 前端开发
js树形菜单 如何用递归制作一个简单的树形菜单
js树形菜单 如何用递归制作一个简单的树形菜单
73 0
|
3月前
|
存储 JavaScript 前端开发
JavaScript中的递归函数
JavaScript中的递归函数
40 0
|
1月前
|
数据采集 缓存 JavaScript
JavaScript递归函数的设计与优化
JavaScript递归函数的设计与优化
|
2月前
|
JavaScript 前端开发 测试技术
了解JS递归
了解JS递归
21 1
|
2月前
|
JavaScript Serverless
JS实现递归功能
JS实现递归功能
|
1月前
|
数据采集 缓存 JavaScript
JavaScript递归函数的设计与优化
JavaScript递归函数的设计与优化
|
3月前
|
前端开发 JavaScript
前端 JS 经典:递归
前端 JS 经典:递归
26 0
|
3月前
|
JavaScript
node.js递归拼凑成树形结构
node.js递归拼凑成树形结构
22 0
|
3月前
|
JavaScript 前端开发
JavaScript递归的理解(最详细)
JavaScript递归的理解(最详细)
|
3月前
|
JSON JavaScript 前端开发
原生js做树形菜单(详细注释+加简易版)
原生js做树形菜单(详细注释+加简易版)
44 0