jq与JS点击显示隐藏二级菜单的几种方法
来源:互联网 发布:云计算怎么实现 编辑:程序博客网 时间:2024/06/02 04:08
//以下是JQ的方法,链式操作一行搞定!<div class="content"> <ul> <li class="level1"> <a href="#" class="current">喇叭裤</a> <ul class="level2" style="display: block"> //初始化一个二级菜单显示 <li>短裤1</li> <li>短裤</li> <li>短裤</li> </ul> </li> <li class="level1"> <a href="#" >喇叭裤</a> <ul class="level2"> <li>短裤1</li> <li>短裤</li> <li>短裤</li> </ul> </li> <li class="level1"> <a href="#" >喇叭裤</a> <ul class="level2"> <li>短裤1</li> <li>短裤2</li> <li>短裤3</li> </ul> </li> </ul></div></body><script> 第一种方法:显示一个二级菜单时其他的隐藏,再次点击已显示的二级菜单时,该二级菜单隐藏// $(".level1 > a").click(function(){// var iclass = $(this).attr("class");// if (iclass=="current"){// $(this).next().hide();// }else {// $(this).addClass("current").next().show()// .parent().siblings()// .children("a").removeClass("current").next().hide(); // return false;// }// }); 第二种方法:可同时显示多个二级菜单,点击显示/隐藏 $(function(){ $(".level1 > a").click(function(){ $(this).next().toggle(800,function(){ //TODO }); }); });// $(function(){// $(".level1 > a").click(function(){// $(this).next().slideToggle(800,function(){ //滑动// //TODO// });// });// });</script>下面是原生JS实现的代码:
<span style="font-size:12px;"><div class="container"> <ul class="menue"> <li> <span>水果</span> <ul class="sub-menue"> <li>橙子</li> <li>苹果</li> </ul> </li> <li> <span>水果</span> <ul class="sub-menue"> <li>橙子</li> <li>苹果</li> </ul> </li> <li> <span>水果</span> <ul class="sub-menue"> <li>橙子</li> <li>苹果</li> </ul> </li> </ul></div><script> var parent = document.getElementsByClassName('menue')[0]; parent.onclick=function (event) { var e = event || window.event, source = e.target||e.srcElement; if (source.tagName.toLowerCase() == 'span' ){ var next = getNextSibling(source); toggleClass(next,'show'); var parent = source.parentNode; var parentSiblings = getAllSiblings(parent); for( var i = 0 ;i<parentSiblings.length; i++){ var secondMenue = getLastSibling(parentSiblings[i]), classIndex = secondMenue.className.indexOf('show'); if(classIndex != -1){ secondMenue.className = secondMenue.className.slice(0,classIndex); } } }else { return false; } stopPropagation(e); }; function stopPropagation(e) { if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } } function getNextSibling(obj){ var result = obj.nextSibling || obj.nextElementSibling; while (result.nodeType != 1 ){ result = result.nextSibling || result.nextElementSibling; if (result == null){ break; } } return result; } function getPreviousSibling(obj){ var result = obj.previousSibling || obj.previousElementSibling; while (result.nodeType != 1 ){ result = result.previousSibling || result.previousElementSibling; if (result == null){ break; } } return result; } function getLastSibling(obj){ var result = obj.lastChild || obj.lastElementChild; while (result.nodeType != 1 ){ result = result.previousSibling; if (result == null){ break; } } return result; } function getAllSiblings(obj) { var arr = [], previous =getPreviousSibling(obj) , next = getNextSibling(obj); while(previous!= null){ arr.push(previous); previous = getPreviousSibling(previous); } while (next != null){ arr.push(next); next = getNextSibling(next); } return arr.reverse(); } function toggleClass(obj,cName) { var index = obj.className.indexOf(cName); if ( index === -1){ obj.className +=' '+cName; }else { obj.className = obj.className.slice(0,index); } }</script></span>
以上代码兼容了IE并且把可重用的方法提取了出来,同时使用了事件代理来减少对DOM的操作来减少回流与重绘。原声JS操作看起来代码多了许多,但还是与JQ同样的思路,当点击一级菜单的时候,显示二级菜单,并且把其他的二级菜单关闭,而关闭与显示的操作的原理即为添加与删除class,我们可以通过transform animate等来添加一些动态效果,让显示与隐藏过渡的更加平滑。
有任何问题可在下方评论。
0 0
- jq与JS点击显示隐藏二级菜单的几种方法
- js和jq分别实现点击显示隐藏的功能
- JQ点击展开二级菜单
- 菜单UI点击隐藏与显示(滑动)
- vue.js 左侧二级菜单显示隐藏切换 实例
- JQ显示与隐藏
- jQ简单实现点击隐藏与显示内容
- [js]悬浮显示二级菜单的实现
- JQ 点击隐藏再点击显示
- csss----伪类,二级菜单显示与隐藏,html
- html 二级菜单的显示和隐藏。+代码(亲测)
- js控制左菜单隐藏与显示
- JS实现点击显示与隐藏
- js/jq 点击按钮显示div,点击页面其他任何地方隐藏div
- jq-产品显示与隐藏
- jQuery,JQ显示与隐藏
- 点击显示隐藏js
- 点击隐藏显示左边菜单
- 初学 Java Web 开发,请远离各种框架,从 Servlet 开发
- 千里码【5】访客统计
- 深入理解JVM之垃圾回收详解
- 第一天:代码入门、HTML语法基础及文档类标签
- ios静态库与动态库的区别
- jq与JS点击显示隐藏二级菜单的几种方法
- 白话Spring(基础篇)---helloworld
- 1090 Higest Price in Supply Chain
- 学习android service记录
- Linux 初始化之 Systemd机制简介
- Swift 笔记(四)
- UML图与机房收费系统实例
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- java.lang.ThreadLocal实现原理和源码分析