树形菜单是一种常见的用户界面元素,用于展示层次结构的数据。每个节点可以有多个子节点,通常以嵌套列表的形式呈现。原生JavaScript实现树形菜单意味着不依赖任何第三方库,仅使用JavaScript、HTML和CSS来完成。
以下是一个简单的静态树形菜单的实现示例:
<ul id="treeMenu">
<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>
#treeMenu ul {
display: none;
list-style-type: none;
padding-left: 20px;
}
#treeMenu .node {
cursor: pointer;
}
document.addEventListener('DOMContentLoaded', function() {
const nodes = document.querySelectorAll('.node');
nodes.forEach(node => {
node.addEventListener('click', function(event) {
event.stopPropagation();
const subMenu = this.nextElementSibling;
if (subMenu && subMenu.tagName === 'UL') {
subMenu.style.display = subMenu.style.display === 'block' ? 'none' : 'block';
}
});
});
});
原因:可能是事件监听器没有正确绑定,或者CSS样式设置有误。
解决方法:
display
属性正确切换。原因:事件冒泡可能导致父节点的事件被触发。
解决方法:
event.stopPropagation()
阻止事件冒泡。原因:动态生成的内容可能没有绑定相应的事件监听器。
解决方法:
通过以上步骤和示例代码,可以实现一个基本的树形菜单,并解决常见的实现问题。
领取专属 10元无门槛券
手把手带您无忧上云