首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js左侧树形菜单代码

JavaScript 左侧树形菜单是一种常见的用户界面元素,用于展示层次结构的数据。以下是一个简单的树形菜单代码示例,包括展开和折叠功能。

基础概念

树形菜单是一种基于树结构的数据展示方式,每个节点可以有多个子节点,通常用于表示文件系统、组织结构或任何具有层次关系的数据。

优势

  1. 直观展示层次关系:用户可以清晰地看到数据的层级结构。
  2. 节省空间:通过折叠不常用的分支,可以有效地利用屏幕空间。
  3. 交互性强:用户可以动态展开和折叠节点,便于浏览和查找信息。

类型

  • 静态树形菜单:数据在页面加载时就已经确定。
  • 动态树形菜单:数据通过 AJAX 请求动态加载。

应用场景

  • 文件管理器:展示文件和文件夹的结构。
  • 组织架构图:展示公司或团队的层级结构。
  • 设置菜单:软件或应用的配置选项。

示例代码

以下是一个简单的静态树形菜单的 HTML 和 JavaScript 代码示例:

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tree Menu Example</title>
    <style>
        ul.tree-menu {
            list-style-type: none;
            padding-left: 20px;
        }
        .tree-menu li {
            cursor: pointer;
        }
        .tree-menu .node {
            display: inline-block;
            margin-right: 5px;
        }
        .tree-menu .children {
            display: none;
        }
        .tree-menu .expanded > .children {
            display: block;
        }
    </style>
</head>
<body>
    <ul class="tree-menu">
        <li>
            <span class="node">+</span> Node 1
            <ul class="children">
                <li>Subnode 1.1</li>
                <li>Subnode 1.2</li>
            </ul>
        </li>
        <li>
            <span class="node">+</span> Node 2
            <ul class="children">
                <li>Subnode 2.1</li>
                <li>Subnode 2.2</li>
            </ul>
        </li>
    </ul>

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const nodes = document.querySelectorAll('.tree-menu .node');
            nodes.forEach(node => {
                node.addEventListener('click', function(event) {
                    event.stopPropagation();
                    const parentLi = this.parentElement;
                    parentLi.classList.toggle('expanded');
                    this.textContent = parentLi.classList.contains('expanded') ? '-' : '+';
                });
            });
        });
    </script>
</body>
</html>

解释

  1. HTML 结构
    • 使用嵌套的 <ul><li> 元素来表示树形结构。
    • 每个节点包含一个 <span> 元素用于显示展开/折叠符号(+-)。
  • CSS 样式
    • .tree-menu 类用于设置列表样式。
    • .children 类默认隐藏子节点。
    • .expanded 类用于展开节点时显示子节点。
  • JavaScript 功能
    • 监听每个节点的点击事件。
    • 切换父 <li> 元素的 expanded 类,从而显示或隐藏子节点。
    • 更新节点符号以反映当前状态。

遇到的问题及解决方法

问题:点击节点时没有展开或折叠。 原因:可能是事件监听器没有正确绑定,或者 CSS 样式没有正确应用。 解决方法

  1. 确保 JavaScript 代码在 DOM 完全加载后执行(使用 DOMContentLoaded 事件)。
  2. 检查 CSS 类名是否正确,并确保样式表正确加载。
  3. 使用浏览器的开发者工具检查元素,确认事件监听器是否正确绑定。

通过以上步骤,可以创建一个基本的树形菜单,并解决常见的展开/折叠问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • zTree实现树形结构菜单

    文章目录 一、简介 二、前端渲染效果 三、实现步骤 1、数据库表结构 2、引入zTree插件 3、树形结构实体类SysModule 4、表示层代码 5、js渲染部分 1、树初始化配置 2、加载数据树...4、控制器关键代码 5、业务逻辑层代码: 6、数据访问层代码: 四、碰到的bug及解决方案 1、指定结点选中无效 2、mybatis多对多关系的处理较为麻烦 一、简介 zTree 是一个依靠 jQuery..."> <script type="text/javascript" src="/ccms/commons/jslib/js-gmxt-define/ztreeTool.js"> 3、树形结构实体类SysModule 省略get和set方法 public class SysModule { /**模板编码*/ private String moduleCode...private String parentCode; /**是否为叶子节点*/ private int isLeaf; /**同级排序编号*/ private int sortNumber; } 树形结构辅助类

    5.5K40

    WordPress隐藏后台左侧菜单如何操作

    前面我们讲了wordpress后台添加左侧边栏菜单如何操作,反过来如果想要隐藏一些菜单怎么实现呢?...我们可以通过remove_menu_page()函数来完成,将如下代码加入到当前主题function.php文件即可 add_action( 'admin_menu', 'ytkah_remove_ad_menus...post_type=page' ) //页面管理 remove_menu_page( 'edit-comments.php' ) //评论菜单 remove_menu_page( 'themes.php...remove_menu_page( 'tools.php' ) //工具页面 remove_menu_page( 'options-general.php' ) //设置页面 }   当然你也可以通过css来隐藏,你想要隐藏哪个菜单...,就把里面的 class,或者 ID 添加进去就可以了,这个应该不难理解,这样不仅可以隐藏插件生成的菜单,还可以隐藏任何菜单。

    1.7K10

    动态加载的树形菜单

    动态加载的树形菜单 开发工具与关键技术:MVC 树形菜单 作者:盘洪源 撰写时间:2019年6月2日星期天 在做到页面需要做到树形菜单,而且还是动态从数据库加载数据的,就是树形菜单的节点由数据库的数据来填充...首先一开始是这个数据库的设置,这个数据库的设置很重要,一开始想着这个树形菜单可以无限级的循坏下去,这得建多少个表啊,后来才发现自己想多了,只需要一个表格就可以实现了,如下 ?...这个代码是怎么实现的,如下: 这个代码是怎么实现的,如下: 后台请求数据代码: public ActionResult ZtreeData(int id = 0) {...}); return Json(list, JsonRequestBehavior.AllowGet); } 前台初始化树形菜单的代码...这是一个很简单的树形菜单,首先开始的在后台将数据库中的数据查询出来,前台就初始化这个树,通过url请求到数据,然后就在页面加载事件初始化这个树。

    3K10

    JAVA中怎样实现树形菜单

    在这里我会很详细的讲解每一步代码,主要是方便新人看懂,弥补曾经自己学习过程中的苦恼。提醒:如果第一种写法理解不了或则看不懂,可以看第二种写法,通过第二种写法去理解第一种的写法,两种写法逻辑是一样的。...就是在实际开发过程中,总会遇到菜单,或则是权限,这个时候就涉及到后端返回数据给前端的时候,不能一个集合把数据一股脑的全部扔给前端,总要把数据整理好,做成像书目录一样的结构返回给前端。...就像以下图示一样 二、目录树结构实现写法 1、准备阶段 ①创建数据表 PS:如果是练习可以不用创建数据库,数据全部通过java代码来创建也可以 sql复制代码CREATE TABLE permission_directory...、菜单等级和路由' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '存储引擎为InnoDB,字符集为utf8'; ②向表中插入数据 SQL复制代码INSERT...("路由") private String route; } ④创建存储菜单对象PermissionDirectoryResVO类 Java复制代码@Data public class PermissionDirectoryResVO

    15010

    wordpress后台添加左侧边栏菜单如何操作

    我们有时为了方便操作会把一些特定的链接添加到wordpress后台左侧菜单栏中,这个要如何实现呢?...其实不会很难,使用两个WordPress内置函数就可以解决问题,分别是add_menu_page()和add_action(),添加到主题目录下的functions.php中就可以了,参考代码如下 /*...' 钩子的回调函数 function my_add_pages() { // 第一个参数'Design page'为菜单名称,第二个参数'网站设计'为菜单标题(可以是链接) // 'manage_options...,填写菜单页面的HTML代码即可 function my_toplevel_page() { echo '这里填菜单页面的HTML代码'; // 如以下示例代码。...wrap 类是WordPress构建好的css类,可以在你的HTML代码中使用 /* echo ' 使用帮助

    2.5K10

    非递归实现树形下拉菜单

    非递归实现树形下拉菜单 博主 默语带您 Go to New World....好的,我会更详细地讲解 非递归实现树形下拉菜单 的完整思路和代码,同时为每一部分都加上清晰的注释,让初学者也能看懂。这次我们会以逐步实现的方式讲解每一步的逻辑。...非递归实现树形下拉菜单 什么是非递归实现? 在递归中,函数会自己调用自己。非递归实现是用 队列(Queue) 或 栈(Stack) 来替代函数调用栈,从而手动管理需要处理的数据,逐步完成任务。...完整代码(队列实现) import java.util.*; public class CategoryTreeBuilder { /** * 构建树形结构(非递归方式,使用队列实现...,适合初学者 数据过深可能导致栈溢出 非递归 更灵活,避免栈溢出问题 实现稍复杂,代码冗长 总结 非递归方法通过手动管理队列解决了递归方法的栈深度问题,更适合大规模数据。

    9210
    领券