首页 前端知识 二级菜单原生js实现

二级菜单原生js实现

2024-03-12 01:03:19 前端知识 前端哥 37 144 我要收藏

今天莫名其妙想用原生js实现二级菜单,之前用jquery感觉挺简单的,但是jquery好久没用了,试着用原生的js实现一下。
首先用nodeName判断子节点为li元素,然后就有二种实现方式
1.item.style.display用none和block进行菜单伸缩
这种方式挺常见的,但是一开始判断display的值要考虑多一些,因为这种方式加css是直接加到标签上的。
代码如下
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
        li{
            display: none;
        }
        </style>
    </head>
    <body>
        <ul>电视剧
            <li>鹤唳华亭</li>
            <li>仙剑奇侠传</li>
            <li>诛仙</li>
        </ul>
        <ul>电影
            <li>钢铁侠</li>
            <li>大鱼海棠</li>
            <li>阿甘正传</li>
        </ul>
        <ul>小说
            <li>红楼梦</li>
            <li>倚天屠龙记</li>
            <li>神雕侠侣</li>
        </ul>
    </body>
    <script>
    let oul=document.getElementsByTagName("ul");
    for(let j=0;j<oul.length;j++){
        oul[j].addEventListener("click",function(){
            let son=Array.from(this.childNodes).filter(item=>item.nodeName.toLowerCase()=='li')
            // 第一种方式
            son.forEach(item=>{
                if(item.style.display==='none'){
                    item.style.display='block';
                }
                // 这种方式改变style的值是直接上标签的css
                else if(item.style.display===''){
                    item.style.display='block';
                }
                else{
                    item.style.display='none';
                }
            });
        })
    }
    </script>
</html>

第二种是点击一级菜单给其子元素加一个类activeli,再次点击则删除该类

代码如下

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
        li{
            display: none;
        }
        .activeli{
            display: block;
        }
            
        </style>
    </head>
    <body>
        <ul>电视剧
            <li>鹤唳华亭</li>
            <li>仙剑奇侠传</li>
            <li>诛仙</li>
        </ul>
        <ul>电影
            <li>钢铁侠</li>
            <li>大鱼海棠</li>
            <li>阿甘正传</li>
        </ul>
        <ul>小说
            <li>红楼梦</li>
            <li>倚天屠龙记</li>
            <li>神雕侠侣</li>
        </ul>
    </body>
    <script>
    let oul=document.getElementsByTagName("ul");
    for(let j=0;j<oul.length;j++){
        oul[j].addEventListener("click",function(){
            let son=Array.from(this.childNodes).filter(item=>item.nodeName.toLowerCase()=='li');
            son.forEach(item=>{
                // 也可以直接用item.classList.contains()
                if(!Array.from(item.classList).some(item=>item==="activeli")){
                    item.classList.add('activeli');
                }else{
                    item.classList.remove('activeli')
                }
            })
        })
    }
    </script>
</html>

转载请注明出处或者链接地址:https://www.qianduange.cn//article/3686.html
标签
评论
会员中心 联系我 留言建议 回顶部
复制成功!