今天莫名其妙想用原生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>

二级菜单原生js实现相关推荐

  1. html一级二级菜单,纯JS添加一级二级菜单的代码

    前提条件,页面中有一个ID为MyMenu的div对象.同时,相应的属性设置如下: .MyMenuFirst ul{list-style-type:none; margin:0px;margin-lef ...

  2. 仿百度的下拉菜单原生js

    废话不多说直接上demo 登录 微博登录 百度登录 网易登录 设置 微博登录 百度登录 网易登录 学术 微博登录 百度登录 网易登录 js如下:注释的是最不用动脑子的想法:没有注释就涉及到闭包的问题, ...

  3. 原生JS制作自动+手动轮播图,附带二级分类菜单

    原生JS制作自动+手动轮播图,附带二级分类菜单 包含以下功能: 1.鼠标移开自动轮播 2.鼠标移入停止自动轮播 3.点击左右按钮可手动切换图片 4.点击索引小圆点可手动切换图片 5.鼠标移入一级菜单展 ...

  4. html点击展开菜单,简单实现js点击展开二级菜单功能

    虽然,jQuery已经非常好用了,但是实际的开发项目中,还是有很多限制,比如项目组奇葩的要求,不能使用任何插件,当然,也是考虑插件占用资源,毕竟100+KB对与小型项目来说还是非常大的.我最近就遇到做 ...

  5. 动态二级下拉菜单html,js实现简洁大方的二级下拉菜单效果代码

    本文实例讲述了js实现简洁大方的二级下拉菜单效果代码.分享给大家供大家参考.具体如下: 这是一款简洁大方的二级下拉菜单,菜单的颜色自己根据需要重新定义吧,这里仅给大家提供一种制作二级菜单的思路,整体效 ...

  6. 原生JS实现苹果菜单

    今天分享下用原生JS实现苹果菜单效果,这个效果的重点有以下几点 图标中心点到鼠标的距离的算法 利用比例计算图标的宽度 代码地址:https://github.com/peng666/blogs/blo ...

  7. vue 左侧菜单隐藏_vue.js 左侧二级菜单显示与隐藏切换的实例代码?

    郎朗坤 废话不多说了,直接给大家贴代码了,完整代码: vue点击切换显示隐藏 {{item.name}} {{subItem.name}} 以上所述是小编给大家介绍的vue.js 左侧二级菜单显示与隐 ...

  8. 第四篇 bonus:js代码实现网页导航二级菜单

    第四篇 bonus:js代码实现网页导航二级菜单 由于小猪蹄子说想学习一些和爬虫相关的东西,所以我让她去看看requests这个库,非常的人性化,可以非常方便的实现常用的爬虫功能.但是小猪蹄子看了以后 ...

  9. 前端----HTML/JS 鼠标停留和移开实例----鼠标指示时显示二级菜单(共三级)

    onmouseover和onmouseout事件和各种position定位的练习, 效果是鼠标指示一级菜单显示二级菜单, 指示二级菜单的选项出现相应三级菜单 效果图: 一级菜单: 鼠标停留时的二级菜: ...

最新文章

  1. PendingIntent详解
  2. myeclispse配置自己的jdk和tomcat
  3. Dataset之图片数据增强:设计自动生成汽车车牌图片算法(cv2+PIL)根据随机指定七个字符生成逼真车牌图片数据集(自然场景下+各种噪声效果)可视化
  4. CodeForces - 1465E Poman Numbers(推公式+贪心)
  5. c# datagridviewcomboboxcell值无效的解决办法
  6. Bash中执行存储过程或普通的SQL命令
  7. Sudoku Killer(HDU-1426)
  8. 穿山甲插屏广告居中_穿山甲跻身广告联盟头部阵营 如何实现增量创新?
  9. Django之ORM字段和参数
  10. 乱码翻译器在线翻译_GAL党的福音——开源生肉翻译器MisakaTranslator正式版发布...
  11. APP软件半成品测试技巧
  12. 在unity中使用Excel表格
  13. 2017年中国网络安全报告
  14. python之parser.add_argument()用法——命令行选项、参数和子命令解析器
  15. 【图像处理】双线性插值法扩展图像像素及其代码实现(亚像素)
  16. 第一、二、三代半导体的区别在哪里?
  17. mac鼠标不能双击打开文件夹的解决方法
  18. 艾司博讯:拼多多价格竞争力不足怎么办
  19. linux文件查找命令
  20. Android studio Build时,Download maven-metadata.xml卡住不动的问题

热门文章

  1. Windows 系统维护
  2. 《伪样本新场景样本挖掘和适应》
  3. 最新转转验机源码+独立后台管理
  4. 免费语音转文字的软件有哪些?快来看看这几个软件
  5. C语言10道入门题集
  6. python的UnboundLocalError: local variable 'xxx' referenced b
  7. 线程池 (通俗易懂)
  8. mysql order by = 用法说明(order by id=1 desc/asc)
  9. 人工智能实验--汉诺塔规约图(四个盘子)
  10. dellR720运用U盘安装windows2008R2系统指导