jquery实现树形菜单完整代码

首先介绍一下jquery实现树形菜单的原理和步骤:

  1. 在html中准备好容器,用于放置树形菜单;
  2. 通过ajax请求或静态数据,获取树形结构的数据,可以是数组形式或json格式;
  3. 遍历数据,根据层级关系,生成菜单的html代码,包括ul、li等元素;
  4. 监听菜单项的点击事件,收缩/展开子菜单,并设置样式;
  5. 将生成的菜单html代码插入到容器中。

下面展示完整的jquery实现树形菜单的代码:

HTML:

<div class="menu-container">
  <ul class="menu">
  </ul>
</div>

CSS:

.menu-container {
  width: 300px;
  border: 1px solid #ccc;
  overflow: auto;
}

.menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

.menu li {
  line-height: 1.5;
}

.menu li a {
  display: block;
  padding: 5px;
  text-decoration: none;
  color: #666;
}

.menu li.active > a {
  background-color: #eee;
}

.menu li ul {
  margin: 0;
  padding: 0;
  display: none;
}

.menu li.active > ul {
  display: block;
}

JS:

$(function () {
  var data = [
    {
      id: 1,
      label: "根节点",
      children: [
        {
          id: 2,
          label: "子节点 1",
          children: [
            {
              id: 3,
              label: "子节点 1-1"
            }
          ]
        },
        {
          id: 4,
          label: "子节点 2",
          children: [
            {
              id: 5,
              label: "子节点 2-1",
              children: [
                {
                  id: 6,
                  label: "子节点 2-1-1"
                }
              ]
            }
          ]
        }
      ]
    }
  ];

  // 生成菜单
  function generateMenu(data, parent) {
    $.each(data, function (index, item) {
      var li = $("<li>")
        .attr("data-id", item.id)
        .appendTo(parent);

      var a = $("<a>").text(item.label).appendTo(li);

      if (item.children && item.children.length > 0) {
        var ul = $("<ul>").appendTo(li);

        generateMenu(item.children, ul);
      }
    });
  }

  // 收缩/展开子菜单
  function toggleMenu(el) {
    var li = $(el).parent("li");

    if (li.hasClass("active")) {
      li.removeClass("active");
    } else {
      li.addClass("active");
    }
  }

  // 监听菜单项的点击事件
  $(document).on("click", ".menu li a", function (event) {
    event.preventDefault();

    toggleMenu(this);
  });

  // 生成菜单项
  generateMenu(data, $(".menu"));
});

这份代码中,先定义了一组数据,生成树形菜单时遍历该数据。通过 generateMenu 函数生成菜单html代码输出到容器中,同时设置了样式。

代码中使用了事件委托,监听菜单项的点击事件。点击菜单项后,通过调用 toggleMenu 函数收缩/展开子菜单,并设置样式。

下面给出一个使用ajax请求获取树形结构数据的示例:

$(function () {
  // 通过ajax请求获取树形结构数据
  $.ajax({
    url: "menu.json",
    dataType: "json"
  }).done(function (data) {
    // 生成菜单项
    generateMenu(data, $(".menu"));
  });

  // 其他代码同上
});

上面的代码中,通过ajax请求一份json格式的数据,获取数据后调用 generateMenu 函数生成菜单项。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery实现树形菜单完整代码 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • 原生JS封装vue Tab切换效果

    让我详细讲解一下“原生JS封装vue Tab切换效果”的攻略。 步骤一:HTML结构 首先,我们需要在HTML中定义tab的页面结构。通常,Tab菜单会使用<ul>和<li>标签,而每个Tab页的内容则使用<div>标签。示例如下: <div class="tab"> <ul clas…

    css 2023年6月10日
    00
  • css简单动画之transition属性详解

    下面我将详细讲解“CSS简单动画之transition属性详解”的攻略,包括概念解释,属性的含义和用法,以及示例说明。 概念解释 CSS动画是用CSS来制作页面元素在不同的状态之间转换的过程。而transition属性是CSS动画的一种实现方式,它用于定义元素的过渡效果,即元素从一个状态到另一个状态的平滑过渡。 属性的含义和用法 transition属性指定…

    css 2023年6月10日
    00
  • CSS 完美兼容IE6/IE7/FF的通用hack方法

    如果我们在编写CSS代码时,需要考虑兼容IE6/IE7/FF,那么就需要使用CSS通用hack来解决问题。下面是一些常见的CSS通用Hack方法,供参考: 1. 属性前缀法 color: #fff; /* 正常显示 */ _color: #f00; /* 只在IE6/IE7中显示红色 */ *color: #0f0; /* 只在IE6中显示绿色 */ 在IE…

    css 2023年6月10日
    00
  • css实现3d立体魔方的示例代码

    实现3D立体魔方的示例代码需要使用CSS 3D transform属性。 设定CSS样式 首先,我们需要给魔方定义一个立方体容器,然后给每个面分别定义CSS样式。对于每一个面,需要设置其宽高和位置。 下面是一个示例: .cube { position: relative; margin: 100px auto; transform-style: preser…

    css 2023年6月10日
    00
  • css 不同媒介的显示样式控制方式

    CSS可以根据不同媒介控制显示样式,其中包括屏幕、打印机等不同引擎。通常我们使用@media规则来定义这些不同媒介的样式,其语法如下: @media mediatype and (media feature){ CSS-Code; } 其中mediatype可以是多种媒介类型, 如 screen(屏幕)、print(打印)、speech(语音)等,media…

    css 2023年6月9日
    00
  • Vue如何在CSS中使用data定义的数据浅析

    在 Vue 中,我们可以使用 data 属性来定义组件的数据。这些数据可以在组件的模板中使用,也可以在组件的 JavaScript 代码中使用。但是,你可能不知道的是,你也可以在 CSS 中使用这些数据。下面是一个完整攻略,包含了如何在 CSS 中使用 Vue 中定义的数据的过程和两个示例说明。 在 CSS 中使用 Vue 中定义的数据 步骤一:将数据绑定到…

    css 2023年5月18日
    00
  • 日常收藏的jquery技巧

    下面我会详细讲解“日常收藏的jquery技巧”的完整攻略。 日常收藏的jquery技巧 选择器 基本选择器 在jQuery中,选择器可以帮助我们找到HTML页面中指定的元素。在使用选择器时,我们可以使用以下几个基本选择器: * (星号):选择所有元素 element:选择指定元素名的元素,例如p、h1、div #id:选择指定id的元素,例如#header …

    css 2023年6月11日
    00
  • 关于ol和ul的padding和margin默认值

    关于ol和ul元素的padding和margin默认值,我们可以从以下几个方面进行探讨: 1. ol和ul元素的默认样式 在浏览器中,ol和ul元素默认具有以下样式: ol { display: block; list-style-type: decimal; margin-top: 1em; margin-bottom: 1em; margin-left:…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部