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

原生js实现菜单树

要在原生 JavaScript 中实现一个菜单树,通常涉及以下几个步骤:

  1. 数据结构设计:首先,需要设计一个合适的数据结构来表示菜单项及其子菜单。通常可以使用嵌套的对象或数组。
  2. DOM 操作:使用 JavaScript 动态生成菜单的 HTML 结构,并将其插入到页面中。
  3. 事件处理:为菜单项添加事件监听器,以处理点击或其他交互操作,例如展开/折叠子菜单。

下面是一个简单的示例,展示如何使用原生 JavaScript 实现一个基本的菜单树:

示例数据结构

代码语言:txt
复制
const menuData = [
    {
        name: '菜单1',
        children: [
            { name: '子菜单1-1' },
            { name: '子菜单1-2', children: [{ name: '子菜单1-2-1' }] }
        ]
    },
    {
        name: '菜单2',
        children: [
            { name: '子菜单2-1' },
            { name: '子菜单2-2' }
        ]
    },
    { name: '菜单3' }
];

HTML 结构

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>菜单树示例</title>
    <style>
        ul {
            list-style-type: none;
            padding-left: 20px;
        }
        .menu-item {
            cursor: pointer;
        }
        .submenu {
            display: none;
        }
    </style>
</head>
<body>
    <ul id="menu"></ul>

    <script src="menu.js"></script>
</body>
</html>

JavaScript 实现

代码语言:txt
复制
// menu.js

function createMenu(data, parentElement) {
    data.forEach(item => {
        const li = document.createElement('li');
        const span = document.createElement('span');
        span.textContent = item.name;
        span.classList.add('menu-item');
        li.appendChild(span);

        if (item.children && item.children.length > 0) {
            const ul = document.createElement('ul');
            ul.classList.add('submenu');
            li.appendChild(ul);
            createMenu(item.children, ul);

            span.addEventListener('click', function(event) {
                event.stopPropagation();
                ul.style.display = ul.style.display === 'block' ? 'none' : 'block';
            });
        }

        parentElement.appendChild(li);
    });
}

document.addEventListener('DOMContentLoaded', () => {
    const menuContainer = document.getElementById('menu');
    createMenu(menuData, menuContainer);
});

解释

  1. 数据结构menuData 是一个嵌套的数组,每个菜单项可以有一个 children 属性,表示其子菜单。
  2. DOM 操作createMenu 函数递归地遍历数据结构,为每个菜单项创建相应的 HTML 元素,并将其插入到指定的父元素中。
  3. 事件处理:为每个有子菜单的菜单项添加点击事件监听器,点击时切换子菜单的显示状态。

优势

  • 灵活性:可以轻松地修改数据结构来适应不同的菜单需求。
  • 可维护性:代码结构清晰,易于理解和维护。
  • 性能:使用原生 JavaScript,避免了额外的库或框架带来的性能开销。

应用场景

  • 后台管理系统:常见的左侧导航菜单。
  • 内容管理系统:用于展示文章分类或其他层级结构的数据。
  • 企业官网:用于展示多层次的导航菜单。

通过这种方式,你可以使用原生 JavaScript 实现一个功能齐全的菜单树,并根据需要进行扩展和定制。

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

相关·内容

领券