Jquery如何实现菜单折叠及其点击链接实现对应菜单展开

背景:该项目为模板项目,启动需要较多的环境配置,由于电脑不支持暂未下载安装,调试方式为上传git后回到浏览器查看效果。

Html部分


css中ul默认隐藏,追加show时显示

ul {

      list-style: none;

     display: none ;

     &.show{

         display: block;

     }

}

 第一步我们先实现菜单的折叠效果,使用toggleClass()方法

$('.sidebar h6').click(function () {

      $(this).parents('section').find("ul").toggleClass('show');

})

第二步实现打开某一个菜单链接则对应菜单展开,在观察时发现浏览器中的path(https://xxx/#trade基本信息)与a标签的href相同,那么我们的实现逻辑为先获取path然后通过path找到与href相同的a标签,进而找到a标签的父级ul切换class中show即可;

最初写法:(此方法有问题附在项目不能启动时解决方案)

//获取浏览器域名中的path
var hash = location.hash

//通过href获取a标签 

$(`a[href='${hash }']`)

$(`a[href='${hash }']`).parents("ul").toggleClass('show');

上传git后刷新线上项目审核元素时发现控制台并无报错,js代码也已经加载,但打开链接并没有使其对应的菜单展开,这时怎么办呢?我们要确认三个地方:(1)location.hash 是否按照预期执行,(2)$(`a[href='${hash}']`) 是否选已取到想要的元素,(3)$(`a[href='${hash}']`).parents("ul").toggleClass('show'); 是否能够按预期效果执行,接下来我们借助consle控制台来实现。

验证阶段:


1、验证第一步时我们发现location.hash 已执行但并没有拿到我们预期的元素,如图:

如上图所示我们获取到的hash并不是a标签中的中文字样,那么我们需要使用使用decodeURIComponent()方法对编码后的hash进行解码 

 2、验证第二步$(`a[href='${hash}']`) 是否选已取到想要的元素

如上图我们也如期拿到了href对应的a标签

3、验证第三步 $(`a[href='${decodeURIComponent(location.hash)}']`).parents("ul").toggleClass('show');是否能够按预期效果执行

三个步骤已经验证完成那么最终的答案就是它了 

$(`a[href='${decodeURIComponent(location.hash)}']`).parents("ul").toggleClass('show');

好了~到这一步我们已经实现了想要的菜单折叠以及打开某一个链接实现 展开对应的菜单啦~

总结:

1、切换元素显示与隐藏方法:toggleClass('xx')

2、如何获取url中的hash值:location.hash
3、如何对url进行解码:decodeURIComponent('url')作用:可对encodeURIComponent()函数编码的URI进行解码

4、如何对url进行编码:encodeURIComponent('url') 作用:可把字符串作为 URI 组件进行编码

5、jquery选取元素的方法
(1)id选择器 $('#myId')

(2).class $('.myClass')

  (3)属性选择器通过href选择a标签 $(`a[href=' ']`)

(4)标签选择器 $('p') 获取所有的<p>元素


版权声明:本文为Mjxiaomihu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。