最简单的纯js实现点击展开二级菜单功能

最简单的纯js实现点击展开二级菜单功能虽然,jQuery已经非常好用了,但是实际的开发项目中,还是有很多限制,比如项目组奇葩的要求,不能使用任何插件,当然,也是考虑插件占用资源,毕竟100+KB对与小型项目来说还是非常大的。我最近就遇到做个点击展开二级菜单的要求,当然只能用原生的JS去写来实现,我借鉴了网上的一个案例,补充一下,分享一下:如果,默认打开页面进来时二级菜单是隐藏的,需要点击才能展现二级菜单,再点击就是隐藏二级菜单。这

大家好,又见面了,我是你们的朋友全栈君。

虽然,jQuery已经非常好用了,但是实际的开发项目中,还是有很多限制,比如项目组奇葩的要求,不能使用任何插件,当然,也是考虑插件占用资源,毕竟100+KB对与小型项目来说还是非常大的。我最近就遇到做个点击展开二级菜单的要求,当然只能用原生的JS去写来实现,我借鉴了网上的一个案例,补充一下,分享一下:

如果,默认打开页面进来时二级菜单是隐藏的,需要点击才能展现二级菜单,再点击就是隐藏二级菜单。这里有两个点,实现展现和隐藏用display=”block“和display=”none”,另外就是要做一个判断,if   else的判断当前是block还是none。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		#sub_menu_1,#sub_menu_2{
			display: none;
		}
		ul li:hover{
			cursor: pointer;
		}
	</style>
</head>
<body>
	<ul>
		<li onclick = "f('sub_menu_1')">一级菜单1
			<ul id="sub_menu_1">
				<li>二级餐单1</li>
				<li>二级餐单1</li>
				<li>二级餐单1</li>
				<li>二级餐单1</li>
			</ul>
		</li>
		<li οnclick="f('sub_menu_2')">一级菜单2
			<ul id="sub_menu_2">
				<li>二级菜单2</li>
				<li>二级菜单2</li>
				<li>二级菜单2</li>
				<li>二级菜单2</li>
			</ul>

		</li>
		<li>一级餐单3</li>
	</ul>
	<script type="text/javascript">
		function f(str){
                var sub_menu = document.getElementById(str);
                var dis_v = sub_menu.style.display;
                
                if(dis_v == "block")
                    sub_menu.style.display = "none";
                else
                    sub_menu.style.display = "block";
                    
            }
		
	</script>
</body>
</html>

有个注意事项就是一级菜单的li不能添加a标签,不然会不起作用。

如果,你的页面默认进来二级菜单是展现的,点击时才关闭。直接把style标签的样式display=”none”去掉就可以。同时需要修改一下js。

<script type="text/javascript">
		function f(str){
                var sub_menu = document.getElementById(str);
                var dis_v = sub_menu.style.display;
                
                if(dis_v == "none")
                    sub_menu.style.display = "block";
                else
                    sub_menu.style.display = "none";
                    
            }
		
	</script>

仔细看,不然你就会发现你需要点击两次才会出现想要的效果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143816.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎样使用灭火器正确灭火_principal和main的区别

    怎样使用灭火器正确灭火_principal和main的区别这个是翻译来的,原文地址:http://www.landley.net/writing/rootfs-howto.html怎样使用initramfs 工作过程简述在2.6kernel启动时,它把rootfs作为它的第一个文件系统挂载(注意:这里的rootfs是真名!!!不是rootfilesystem的缩写)。rootfs是一个特殊的tmpfs,这个不能被

    2022年8月11日
    5
  • RFC2616-HTTP1.1-Status Code(状态码规定部分—单词注释版)

    partof HypertextTransferProtocol–HTTP/1.1RFC2616Fielding,etal.10 StatusCodeDe

    2022年3月25日
    44
  • INSERT INTO SELECT语句与SELECT INTO FROM语句区别

    INSERT INTO SELECT语句与SELECT INTO FROM语句区别1.INSERTINTOSELECT语句语句形式为:InsertintoTable2(field1,field2,…)selectvalue1,value2,…fromTable1或者:InsertintoTable2select*fromTable1注意:(1)要求目标表Table2必须存在,并且字段field,field2…也必须存在(2)注意Table2的主

    2022年7月15日
    13
  • HTTP.sys远程代码执行漏洞修复

    HTTP.sys远程代码执行漏洞修复1.漏洞描述Http.sys是MicrosoftWindows处理HTTP请求的内核驱动程序。HTTP.sys会错误解析某些特殊构造的HTTP请求,导致远程代码执行漏洞。成功利用此漏洞后,攻击者可在System帐户上下文中执行任意代码。由于此漏洞存在于内核驱动程序中,攻击者也可以远程导致操作系统蓝屏。此次受影响的系统中,Windows7、Windows8、WindowsServer2008R2和WindowsServer2012所带的HTTP.sys驱动均存在一个远程代码执行漏洞,远程攻击者可以通

    2022年7月18日
    17
  • 联想st510开卡软件_固态硬盘修复(慧荣sm2246XT主控开卡教程)

    联想st510开卡软件_固态硬盘修复(慧荣sm2246XT主控开卡教程)本帖最后由lwj2996868501于2019-3-2513:12编辑此教程仅适用于固态硬盘且主控SM2246XT的,不是这个主控的就没必要看下去了!准备工具:起子,镊子(铁丝也行),坏固态硬盘,sata转USB转接卡(硬盘盒也可以),慧荣sm2246XT开卡工具(此帖子只提供一个版本的工具,其他版本自行网上下载,这个主控开卡工具版本很多具体用什么版本网上找就找得到界面都是一样的。不用一…

    2022年4月27日
    495
  • AMD FreeSync正式发布:更流畅 更便宜

    AMD FreeSync正式发布:更流畅 更便宜2013年10月份,NVIDIA推出了一项革命性的垂直同步技术G-Sync,通过新控制模块的加入配合GeForceGPU控制显示器刷新率,彻底解决垂直同步、刷新率限制带来的游戏画面撕裂、卡顿、延迟等问题,保证最好的流畅度。该技术的效果非常明显,但缺点也同样明显,那就是需要显示器增加新的模块,成本较高,而且照例是NVIDIA的封闭技术。随后,AMD也提出了自己的解决方案,称之为Fr

    2022年6月3日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号