用JS做的简单的可折叠的两级树形菜单

下面我将详细讲解使用JS实现一个简单的可折叠两级树形菜单的攻略。

准备工作

首先,我们需要准备一些基本的html和css代码,用于渲染出菜单的样式和结构。下面是一个简单的示例结构:

<div class="menu">
  <ul>
    <li><a href="#">菜单1</a>
      <ul>
        <li><a href="#">子菜单1</a></li>
        <li><a href="#">子菜单2</a></li>
        <li><a href="#">子菜单3</a></li>
      </ul>
    </li>
    <li><a href="#">菜单2</a>
      <ul>
        <li><a href="#">子菜单1</a></li>
        <li><a href="#">子菜单2</a></li>
      </ul>
    </li>
    <li><a href="#">菜单3</a>
      <ul>
        <li><a href="#">子菜单1</a></li>
        <li><a href="#">子菜单2</a></li>
        <li><a href="#">子菜单3</a></li>
        <li><a href="#">子菜单4</a></li>
      </ul>
    </li>
  </ul>
</div>

接下来,我们需要为菜单的展开和折叠添加样式。下面是一个简单的样式示例:

.menu li ul {
  display: none;
}
.menu li.open ul {
  display: block;
}

上述样式中,我们使用了CSS选择器来隐藏所有的子菜单,同时为展开状态的菜单添加了.open类,用于显示对应的子菜单。

实现折叠展开功能

接下来,我们需要使用JS来实现菜单的折叠和展开功能。我们可以通过给菜单添加点击事件来实现这个功能。下面是一个简单的示例:

var menuItems = document.querySelectorAll(".menu > ul > li");
menuItems.forEach(function(menuItem) {
  menuItem.addEventListener("click", function() {
    this.classList.toggle("open");
  });
});

上述代码中,我们首先使用document.querySelectorAll方法来获取所有一级菜单。然后,我们对每个菜单项都添加了一个click事件监听器,在点击菜单项时切换.open类,实现菜单的折叠和展开。

绑定事件监听器

最后一步,我们需要确保菜单项的子菜单也能够折叠和展开。为此,我们需要在子菜单实际展开时,添加事件监听器。下面是一个示例代码:

var subMenuItems = document.querySelectorAll(".menu > ul > li > ul > li");
subMenuItems.forEach(function(subMenuItem) {
  subMenuItem.addEventListener("click", function(event) {
    event.stopPropagation();
  });
});

上述代码中,我们首先使用document.querySelectorAll方法来获取所有二级菜单项。然后,我们对每个子菜单项都添加了一个click事件监听器,通过event.stopPropagation()方法来阻止点击事件冒泡,确保子菜单项的点击行为不会触发父级菜单的折叠或展开行为。

示例说明

上述示例中,展示了一个标准的两级菜单,使用了上述的HTML、CSS和JS代码进行实现。

该示例展示了如何将上述的代码扩展到多级菜单,并添加了更多的样式以实现更好的视觉效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用JS做的简单的可折叠的两级树形菜单 - Python技术站

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

相关文章

  • VBS一键配置VOIP脚本代码

    1. 确定脚本的功能 在编写脚本代码之前,首先需要确定脚本的功能。在这个例子中,脚本的功能是“一键配置VOIP”,也就是帮助用户配置环境以便进行语音通话。具体的配置包括网络设置,软件安装等等。 2. 创建VBS脚本文件 创建一个新的文本文件,然后将文件后缀名改为“.vbs”来创建一个VBS脚本文件。接着,在该文件中编写代码。 3. 编写脚本代码 在脚本代码中…

    JavaScript 2023年6月11日
    00
  • thinkphp3.x中display方法及show方法的用法实例

    下面我将为你详细讲解”thinkPHP3.x中display方法及show方法的用法实例”的完整攻略。 一、display方法的用法 在thinkPHP中,display方法可以用来显示模板文件,当你调用display方法时,系统默认会去找位于View目录下的相应视图文件进行模板渲染,这个方法主要有两个参数: display($templateFile=”…

    JavaScript 2023年5月19日
    00
  • 《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法

    《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法 什么是JavaScript? JavaScript 是一种用于 Web 上的编程语言。它用于为 web 页面添加交互性和动态效果。JavaScript 通常通过在网页上嵌入脚本来实现: <script type="text/javascript">…

    JavaScript 2023年5月18日
    00
  • JavaScript的Module模式编程深入分析

    JavaScript的Module模式编程深入分析 Module模式是JavaScript中常用的一种编程模式,它能够帮助我们解决变量作用域、命名冲突、代码复用等问题。在本文中,我们将深入分析JavaScript的Module模式编程,包括如何创建一个模块、模块的特点和示例说明。 如何创建一个模块 创建一个Module模式的关键是使用闭包。闭包可以在函数执行…

    JavaScript 2023年5月27日
    00
  • 在JavaScript中操作时间之getUTCDate()方法的使用

    当我们在JavaScript中需要操作时间时,getUTCDate()是一个非常实用的方法,它可以获取当前时间基于协调世界时(UTC)的日期中的天数,即1到31之间的整数值。 方法语法 getUTCDate()方法的语法如下: dateObject.getUTCDate() 其中,dateObject表示需要获取日期的Date对象。 方法返回值 getUTC…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript表单验证(E-mail 验证)

    详解JavaScript表单验证(E-mail 验证) 在实现表单验证时,E-mail 验证是一个必不可少的步骤。在本文中,我们将会介绍如何使用 JavaScript 进行 E-mail 验证,以确保用户输入的 E-mail 地址格式正确。 步骤一:获取用户输入的 E-mail 地址 在 JavaScript 中获取用户输入的 E-mail 地址可以使用 g…

    JavaScript 2023年6月10日
    00
  • Ajax异步请求的五个步骤及实战案例

    下面我来详细讲解一下“Ajax异步请求的五个步骤及实战案例”的完整攻略。 一、Ajax异步请求的五个步骤 1. 创建Ajax对象 使用JavaScript原生方式创建Ajax对象,可以使用XMLHttpRequest对象,也可以使用ActiveXObject。 2. 设置请求方式和请求地址 通过Ajax对象的open方法设置请求方式和请求地址,请求方式有GE…

    JavaScript 2023年6月11日
    00
  • 彻底弄懂 JavaScript 执行机制

    彻底弄懂 JavaScript 执行机制 JavaScript 的执行环境 JavaScript 代码的执行必须依赖一个执行环境,该执行环境可以是浏览器、 Node.js 服务器或其它解释器等等,而这些执行环境会为 JavaScript 提供几乎相同的对象和方法,但是在细节上或许会略有不同。 JavaScript 的执行过程 JavaScript 的执行过程…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部