当前位置:首页 > JavaScript

js实现树形菜单

2026-01-30 11:20:11JavaScript

实现树形菜单的基本思路

使用JavaScript实现树形菜单通常需要结合HTML和CSS。树形菜单的核心是递归结构,每个菜单项可能包含子菜单,通过DOM操作动态展示或隐藏子项。

HTML结构设计

基础的树形菜单HTML结构通常使用嵌套的无序列表(<ul><li>)表示层级关系:

<ul class="tree">
  <li>
    <span class="toggle">父节点1</span>
    <ul>
      <li>子节点1</li>
      <li>子节点2</li>
    </ul>
  </li>
  <li>
    <span class="toggle">父节点2</span>
    <ul>
      <li>子节点3</li>
      <li>
        <span class="toggle">子节点4</span>
        <ul>
          <li>孙节点1</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

CSS样式设置

为树形菜单添加基础样式和交互效果:

.tree ul {
  list-style: none;
  padding-left: 20px;
  display: none;
}
.tree li {
  margin: 5px 0;
}
.tree .toggle {
  cursor: pointer;
}
.tree .toggle::before {
  content: "+ ";
}
.tree .active::before {
  content: "- ";
}
.tree .active + ul {
  display: block;
}

JavaScript交互逻辑

通过事件委托实现点击展开/折叠功能:

document.querySelector('.tree').addEventListener('click', function(e) {
  if (e.target.classList.contains('toggle')) {
    e.target.classList.toggle('active');
  }
});

动态生成树形菜单

如果需要从数据动态生成树形结构,可以使用递归函数:

function buildTree(data, parentElement) {
  const ul = document.createElement('ul');
  data.forEach(item => {
    const li = document.createElement('li');
    if (item.children) {
      const span = document.createElement('span');
      span.className = 'toggle';
      span.textContent = item.name;
      li.appendChild(span);
      buildTree(item.children, li);
    } else {
      li.textContent = item.name;
    }
    ul.appendChild(li);
  });
  parentElement.appendChild(ul);
}

// 示例数据
const treeData = [
  {
    name: '父节点1',
    children: [
      { name: '子节点1' },
      { name: '子节点2' }
    ]
  },
  {
    name: '父节点2',
    children: [
      { name: '子节点3' },
      {
        name: '子节点4',
        children: [
          { name: '孙节点1' }
        ]
      }
    ]
  }
];

buildTree(treeData, document.getElementById('treeContainer'));

添加动画效果

使用CSS过渡为展开/折叠添加平滑动画:

.tree ul {
  overflow: hidden;
  transition: max-height 0.3s ease-out;
  max-height: 0;
}
.tree .active + ul {
  max-height: 1000px;
}

完整组件实现

结合以上代码,可以创建一个完整的树形菜单组件。根据实际需求,可以进一步添加功能如:

js实现树形菜单

  • 复选框选择
  • 右键菜单
  • 拖拽排序
  • 异步加载子节点数据

实现时注意保持代码模块化和可维护性,对于复杂场景可以考虑使用现有库如jsTree或zTree。

标签: 菜单js
分享给朋友:

相关文章

如何制作css导航菜单

如何制作css导航菜单

创建基本HTML结构 导航菜单的基础是HTML结构。使用<nav>标签包裹无序列表<ul>,每个菜单项用<li>标签表示,链接用<a>标签。 <…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…