使用无序列表ul实现多级菜单

首先要求后端传来的菜单数据必须包含:

id---菜单id
pid---父菜单id

整体思想:首先渲染出整个菜单(不包含父子关系),再用js将各标签分组、挂载到父结点上。

这里给各个菜单增加自定义属性pid,如下(jsp代码):

<ul class="navbar" style="width: 100%">
        <c:forEach var="menu" items="${menus}">
            <li id="${menu.menuId}" data-pid="${menu.pId}">
                <a href="${menu.url}" target="center" onclick="showMenu(this);return false;">${menu.menuName}
                    <img src="./img/open.png" alt="">
                </a>
            </li>
        </c:forEach>
    </ul>

其中,data-pid(data-xxx-xxx格式)为目前使用较多的自定义属性定义方式

在js中的代码为:

//html加载完毕后执行
window.onload = function () {
            var list = document.getElementsByTagName("li");
            for (var i = 0; i < list.length; i++) {
                if (list[i].dataset.pid === "") {
                    //这里是顶级菜单
                } else if (list[i].dataset.pid !== "") {
                    //这里是子结点
                    //取出pid
                    var pid = list[i].dataset.pid;
                    var pele = document.getElementById(pid);
                    //寻找父菜单
                    if (document.getElementById("u" + pid) == null) {
                        //不存在则创建
                        var ul = document.createElement("ul");
                        ul.setAttribute("id", "u" + pid);
                        ul.appendChild(list[i]);
                        pele.appendChild(ul);
                    } else {
                        //存在则添加
                        var ul = document.getElementById("u" + pid);
                        ul.appendChild(list[i]);
                    }
                }
            }
        }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值