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>
相关文章
|
1月前
|
JSON JavaScript 前端开发
js树形菜单 如何用递归制作一个简单的树形菜单
js树形菜单 如何用递归制作一个简单的树形菜单
64 0
|
6天前
|
JavaScript 前端开发 测试技术
了解JS递归
了解JS递归
13 1
|
13天前
|
JavaScript Serverless
JS实现递归功能
JS实现递归功能
|
1月前
|
前端开发 JavaScript
前端 JS 经典:递归
前端 JS 经典:递归
21 0
|
1月前
|
JavaScript
node.js递归拼凑成树形结构
node.js递归拼凑成树形结构
17 0
|
1月前
|
JavaScript 前端开发
JavaScript递归的理解(最详细)
JavaScript递归的理解(最详细)
|
1月前
|
JSON JavaScript 前端开发
原生js做树形菜单(详细注释+加简易版)
原生js做树形菜单(详细注释+加简易版)
36 0
|
1月前
|
Rust 前端开发 JavaScript
【面试题】JavaScript中递归的理解
【面试题】JavaScript中递归的理解
|
1月前
|
JSON JavaScript 前端开发
用JS实现简单的树形菜单的功能制作
用JS实现简单的树形菜单的功能制作
|
1月前
|
JavaScript 前端开发 数据处理
【JavaScript 数据处理-番外篇】手写了几个数据处理,都是用的递归
【JavaScript 数据处理-番外篇】手写了几个数据处理,都是用的递归