jquery实现树形菜单完整代码

yizhihongxing

首先介绍一下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日

相关文章

  • CSS教程 CSS定位属性

    CSS教程: CSS定位属性 什么是CSS定位属性? CSS定位属性用于控制HTML元素在网页中的位置,包括相对定位、绝对定位和固定定位。定位属性能够让我们控制元素在网页上出现的位置、大小、层级关系以及叠放顺序等。 相对定位 相对定位是一种基于元素原来位置进行位置调整的定位方式,通过调整元素的上下左右边距来完成位置调整,相对定位不会对文档流产生任何影响。 下…

    css 2023年6月9日
    00
  • jQuery实现导航样式布局操作示例【可自定义样式布局】

    先给出这个攻略的大致内容: jQuery实现导航样式布局操作示例【可自定义样式布局】: 准备工作 添加HTML代码 添加CSS代码 添加jQuery代码 示例说明 示例演示 示例源码 下面将一步步详细讲解每个部分。 1. 准备工作 首先,我们需要引入jQuery库,可以从官网下载然后引入或者使用CDN方式引入。 2. 添加HTML代码 我们假设有4个导航,分…

    css 2023年6月10日
    00
  • CSS中的元素定位方法详解

    以下是关于“CSS中的元素定位方法详解”的完整攻略: 一、引言 在CSS中,元素的定位就是指对某一个元素的位置或大小进行设置,以使其能够满足我们对网页布局的需要。在本文中,我们将详细讲解如何在CSS中使用元素定位方法。 二、CSS中的元素定位方法 在CSS中,有多种元素定位方法,如position属性、float属性等。下面将分别进行详细介绍。 2.1 po…

    css 2023年6月9日
    00
  • CSS3 icon font完全指南(CSS3 font 会取代icon图标)

    CSS3 Icon Font完全指南 什么是CSS3 Icon Font? CSS3 Icon Font,即CSS3字体图标,是用CSS3代码代替图片来设计网页图标的方法。它的出现极大地简化了网页图标的制作流程,从而加快了网页的开发速度。与传统的图片图标相比,CSS3 Icon Font优势在于具有良好的可扩展性、优异的渲染性能和更好的可维护性。 CSS3 …

    css 2023年6月9日
    00
  • React useCallback钩子的作用方法demo

    React的useCallback钩子是一个用于优化性能的Hooks。其作用是缓存一个函数引用,以便可以在渲染周期之间复用该函数。 使用方法 useCallback接受两个参数: 一个需要缓存的函数 一个依赖项数组 当依赖项改变时,useCallback返回的缓存函数才会被重新计算。 示范1:使用useCallback优化子组件的渲染 在下面的示例中,我们将…

    css 2023年6月10日
    00
  • 滑动门 圆角背景宽度和高度自适应

    滑动门是一种常见且实用的网页设计技巧,可以通过 CSS 实现灵活、美观的网页布局。本攻略将详细讲解如何实现一个滑动门,在该效果的基础上增加圆角背景,并实现宽度和高度自适应。 实现滑动门 第一步,我们需要准备两张图片,分别表示按钮的正常和悬停状态。我们可以在 HTML 中添加两个 元素作为按钮的容器,然后将两张图片作为作为 的背景图实现按钮的样式。 <s…

    css 2023年6月10日
    00
  • HTML如何在两个div标签中间画一条竖线

    要在两个div标签中间画一条竖线,可以通过以下步骤实现: 1.在HTML中的两个div标签之间插入一个空div元素作为竖线的容器。 2.使用CSS样式为这个空div元素添加宽度、高度、背景颜色以及边框宽度和样式等属性,来呈现出竖线的效果。 下面是两个示例来说明这个过程: 示例1: html和css代码 <div class="left&quo…

    css 2023年6月10日
    00
  • CSS中关于变量的基本教程

    让我们开始讲解“CSS中关于变量的基本教程”的完整攻略。 1. 什么是CSS变量 CSS变量是CSS3引入的新特性,也被称为“自定义属性”。可以用用于储存和重用一些常用的值,例如颜色、字体、边距等等。 在CSS中定义一个变量,需要用到–前缀,例如: :root { –primary-color: #007bff; } 在这个例子中,:root 选择器用来…

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