背景:该项目为模板项目,启动需要较多的环境配置,由于电脑不支持暂未下载安装,调试方式为上传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>元素