JS实现多级菜单中当前菜单不随页面跳转样式而发生变化


Posted in Javascript onMay 30, 2017

一.概述

        本文介绍了JQuery巧妙实现多级菜单中当前菜单不随页面跳转样式发生变化,貌似没看懂啥意思?

看图说话:就是点二级或多级菜单时,父级展开,当前菜单是被选中状态,这下明白了吧?

JS实现多级菜单中当前菜单不随页面跳转样式而发生变化

二.应用场景

         当一个项目使用公共模板文件时(如上图的左侧菜单栏),我们给每个子菜单添加链接时,点击页面跳转样后还是公共模板的样式,这时就需要实现动态加载当前菜单的样式。

三.实现方法

第一种:.通过php传递变量,模板页面通过接收这些变量来实现当前页面的菜单选中与否,父级展开等这些样式

缺点:虽然实现简单,但是每个页面都需要php传递变量,很繁琐,这种方法不推荐,故不再赘述!

第二种:通过比对当前菜单里的a标签的href值与浏览器的url的值,判断a标签里href属性值是属于浏览器url中的一部分,即表示包含该a标签的菜单应该时被选中状态,在将样式赋予该菜单及对应的父级菜单。

四.举个栗子

<ul class="sidebar-menu">
  <li class="header">主菜单</li>
  <li class="treeview">
   <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
   <i class="fa fa-users"></i> <span>用户管理</span>
   <span class="pull-right-container">
    <i class="fa fa-angle-left pull-right"></i>
   </span>
   </a>
   <ul class="treeview-menu">
   <li><a href="{{ path('agent') }}" rel="external nofollow" ><i class="fa fa-circle-o"></i> 代理商</a></li>
   <li><a href="{{ path('client') }}" rel="external nofollow" ><i class="fa fa-circle-o"></i> 委托人</a></li>
   <li><a href="{{ path('cs_staff') }}" rel="external nofollow" ><i class="fa fa-circle-o"></i> 客服</a></li>
   <li><a href="{{ path('admin') }}" rel="external nofollow" ><i class="fa fa-circle-o"></i> 管理员</a></li>
   </ul>
  </li>
  <li class="treeview">
   <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
   <i class="fa fa-bicycle"></i> <span>车辆管理</span>
   <span class="pull-right-container">
    <i class="fa fa-angle-left pull-right"></i>
   </span>
   </a>
   <ul class="treeview-menu">
   <li><a href="{{ path('bike') }}" rel="external nofollow" ><i class="fa fa-circle-o"></i> 单车</a></li>
   </ul>
  </li>
  <li class="treeview">
   <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
   <i class="fa fa-fw fa-cny"></i> <span>统计报表</span>
   <span class="pull-right-container">
    <i class="fa fa-angle-left pull-right"></i>
   </span>
   </a>
   <ul class="treeview-menu">
   <li><a href="{{ path('report')}}" rel="external nofollow" ><i class="fa fa-circle-o"></i> 单车收益</a></li>
   </ul>
  </li>
  </ul>

注:上述样式是bootstamp的样式

如果当前页面是管理员页,那个给所对应的li添加class="active"的属性,父级ul的样式由style="display: none;"修改为style="display: block;",ul的父级再添加class="active"的属性,即有了图一的效果。

以下是我写的js实现代码,放在公共js文件即可

var CURRENT_URL = window.location.href.split('?')[0];
 CURRENT_URL_ARR=CURRENT_URL.split("/",6); 
 for (i=0;i<CURRENT_URL_ARR.length ;i++ ){
 TEM_URL = CURRENT_URL_ARR.join(",");
 TEM_URL = TEM_URL.replace(/,/g,"/");
 $('.sidebar-menu').find('a').filter(function () {
  return this.href ==TEM_URL+"/";
 }).parent('li').addClass('active').parent('ul').css("display","block").parent('li').addClass('active');
 CURRENT_URL_ARR.pop();
 }

解释:

第1行:取得当前url?前的地址,去除url参数

alert(CURRENT_URL);

结果为:http://partner.bike.lc/admin/

第2行:把url里按“/”再次分割成字符串数组,后面的6为了精确的找到对应控制器及方法,按需设着

alert(CURRENT_URL_ARR);

结果为:http:,,partner.bike.lc,admin,

第3行:循环匹配url

第4行:再将数组转化为字符串

aert(TEM_URL);

循环得到的结果依次为:

http:,,partner.bike.lc,admin,
http:,,partner.bike.lc,admin
http:,,partner.bike.lc
...

第5行:将上一步字符串转化为URL形式

aert(TEM_URL);

循环得到的结果依次为:

http://partner.bike.lc/admin/
http://partner.bike.lc/admin
http://partner.bike.lc

...

第6-10行:遍历菜单栏里的所有a标签,判断循环里的url是否有等于a标签的href值,如果有加上所需的样式

 注:

this.href得到的是完整的URL地址;

pop用于删除并返回数组的最后一个元素,此步很重要。

好了,以上所述是小编给大家介绍的JS实现多级菜单中当前菜单不随页面跳转样式而发生变化 。不知道大家理解了没有。主要是理解实现思路,样式可根据自身情况调整~

Javascript 相关文章推荐
利用js动态添加删除table行的示例代码
Dec 16 Javascript
jquery插件开发之实现google+圈子选择功能
Mar 10 Javascript
JavaScript数组去重的3种方法和代码实例
Jul 01 Javascript
Javascript 获取鼠标当前的位置实现方法
Oct 27 Javascript
禁用backspace网页回退功能的实现代码
Nov 15 Javascript
javascript输出AscII码扩展集中的字符方法
Dec 26 Javascript
PostgreSQL Node.js实现函数计算方法示例
Feb 12 Javascript
实用的Vue开发技巧
May 30 Javascript
JavaScript中变量提升机制示例详解
Dec 27 Javascript
JavaScript鼠标拖拽事件详解
Apr 03 Javascript
JS 4个超级实用的小技巧 提升开发效率
Oct 05 Javascript
交互式可视化js库gojs使用介绍及技巧
Feb 18 Javascript
Angularjs中使用轮播图指令swiper
May 30 #Javascript
AngularJS路由Ui-router模块用法示例
May 29 #Javascript
Angular2学习教程之组件中的DOM操作详解
May 28 #Javascript
Angular2学习教程之ng中变更检测问题详解
May 28 #Javascript
Angular2使用jQuery的方法教程
May 28 #jQuery
Angular.js实现动态加载组件详解
May 28 #Javascript
利用node.js如何搭建一个简易的即时响应服务器
May 28 #Javascript
You might like
提问的智慧(2)
2006/10/09 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
PHP在线书签系统分享
2016/01/04 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
javascript获取元素的计算样式
2019/05/24 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
django站点管理详解
2017/12/12 Python
Django权限机制实现代码详解
2018/02/05 Python
用python实现刷点击率的示例代码
2019/02/21 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
倡导文明标语
2014/06/16 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
大专学生求职自荐信
2014/07/06 职场文书
2015年环保局工作总结
2015/05/22 职场文书
重阳节简报
2015/07/20 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
小学四年级作文之写景
2019/08/23 职场文书
浅谈Python数学建模之数据导入
2021/06/23 Python
JavaScript组合继承详解
2021/11/07 Javascript
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers