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

发布时间 - 2026-01-11 01:30:16    点击率:

一.概述

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

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

二.应用场景

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

三.实现方法

第一种:.通过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实现多级菜单中当前菜单不随页面跳转样式而发生变化 。不知道大家理解了没有。主要是理解实现思路,样式可根据自身情况调整~


# js实现多级菜单  # JS+CSS实现的简单折叠展开多级菜单效果  # JavaScript实现带箭头标识的多级下拉菜单效果  # JavaScript实现向右伸出的多级网页菜单效果  # JavaScript多级判定代码优化浅析  # 跳转  # 转化为  # 依次为  # 的是  # 好了  # 放在  # 客服  # 遍历  # 菜单中  # 所需  # 给大家  # 很重要  # 这下  # 来实现  # 我写  # 所述  # 再将  # 第二种  # 小编  # 第一种 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Gate和Policy进行授权?(权限控制)  如何在IIS服务器上快速部署高效网站?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  如何在阿里云域名上完成建站全流程?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  如何快速搭建高效WAP手机网站吸引移动用户?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  如何在服务器上配置二级域名建站?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Android滚轮选择时间控件使用详解  Laravel如何使用Service Container和依赖注入?(代码示例)  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何在万网利用已有域名快速建站?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  JavaScript如何实现音频处理_Web Audio API如何工作?  制作旅游网站html,怎样注册旅游网站?  Android GridView 滑动条设置一直显示状态(推荐)  Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  WEB开发之注册页面验证码倒计时代码的实现  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel storage目录权限问题_Laravel文件写入权限设置  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Firefox Developer Edition开发者版本入口  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  大同网页,大同瑞慈医院官网?  教你用AI润色文章,让你的文字表达更专业  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  如何用虚拟主机快速搭建网站?详细步骤解析  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  ,南京靠谱的征婚网站?  如何挑选最适合建站的高性能VPS主机?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  如何在宝塔面板创建新站点?  如何选择PHP开源工具快速搭建网站?