树状菜单是一种常见的用户界面元素,用于展示层次结构的数据。在JavaScript中实现树状菜单可以通过多种方式,包括使用递归、DOM操作和事件处理。下面是一个简单的示例,展示如何使用JavaScript和HTML实现一个基本的树状菜单。
树状菜单通常由节点组成,每个节点可以有子节点。用户可以展开或折叠节点以查看或隐藏其子节点。这种结构有助于组织和导航复杂的数据集。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tree Menu</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div id="treeMenu">
<ul>
<li>
<span class="node">Node 1</span>
<ul>
<li><span class="node">Node 1.1</span></li>
<li><span class="node">Node 1.2</span></li>
</ul>
</li>
<li>
<span class="node">Node 2</span>
<ul>
<li><span class="node">Node 2.1</span></li>
<li><span class="node">Node 2.2</span>
<ul>
<li><span class="node">Node 2.2.1</span></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<script src="script.js"></script>
</body>
</html>
#treeMenu ul {
list-style-type: none;
padding-left: 20px;
}
.node {
cursor: pointer;
}
.node::before {
content: "+ ";
}
.node.expanded::before {
content: "- ";
}
document.addEventListener('DOMContentLoaded', function() {
const nodes = document.querySelectorAll('.node');
nodes.forEach(node => {
node.addEventListener('click', function(event) {
event.stopPropagation();
const ul = this.nextElementSibling;
if (ul && ul.tagName === 'UL') {
ul.style.display = ul.style.display === 'none' || ul.style.display === '' ? 'block' : 'none';
this.classList.toggle('expanded');
}
});
});
});
event.stopPropagation()
防止点击事件冒泡到父元素,导致不必要的展开/折叠操作。通过上述步骤和代码示例,你可以实现一个基本的树状菜单。根据具体需求,你可以进一步扩展和定制功能。
领取专属 10元无门槛券
手把手带您无忧上云