cookie实现刷新不变化树形菜单
通过设置cookie来保存树形菜单的状态,在页面加载时重新读取cookie来设置菜单。
菜单的HTML结构:

1 <div class="treemenu"> 2 <ul> 3 <li> 4 <a href="#" id="treemenu_a_1">一级菜单一</a> 5 <div class="submenu" id="submenu_1"> 6 <ul> 7 <li><a href="subpage/a.html" id="submenu_a_1_1">二级菜单一</a></li> 8 <li><a href="subpage/b.html" id="submenu_a_1_2">二级菜单二</a></li> 9 <li><a href="#" id="submenu_a_1_3">二级菜单三</a></li> 10 <li><a href="#" id="submenu_a_1_4">二级菜单四</a></li> 11 <li><a href="#" id="submenu_a_1_5">二级菜单五</a></li> 12 </ul> 13 </div> 14 </li> 15 <li> 16 <a href="#" id="treemenu_a_2">一级菜单二</a> 17 <div class="submenu" id="submenu_2"> 18 <ul> 19 <li> 20 <a href="#" id="submenu_a_2_1">二级菜单一</a> 21 <div class="submenu" id="submenu_2_1"> 22 <ul> 23 <li><a href="#" id="submenu_a_2_1_1">三级菜单一</a></li> 24 <li><a href="#" id="submenu_a_2_1_2">三级菜单二</a></li> 25 <li> 26 <a href="#" id="submenu_a_2_1_3">三级菜单三</a> 27 <div class="submenu" id="submenu_2_1_3"> 28 <ul> 29 <li><a href="#" id="submenu_a_2_1_3_1">四级菜单一</a></li> 30 <li><a href="#" id="submenu_a_2_1_3_2">四级菜单二</a></li> 31 <li><a href="#" id="submenu_a_2_1_3_3">四级菜单三</a></li> 32 </ul> 33 </div> 34 </li> 35 </ul> 36 </div> 37 </li> 38 <li><a href="#" id="submenu_a_2_2">二级菜单二</a></li> 39 <li><a href="#" id="submenu_a_2_3">二级菜单三</a></li> 40 <li><a href="#" id="submenu_a_2_4">二级菜单四</a></li> 41 <li><a href="#" id="submenu_a_2_5">二级菜单五</a></li> 42 </ul> 43 </div> 44 </li> 45 <li> 46 <a href="#" id="treemenu_a_3">一级菜单三</a> 47 <div class="submenu" id="submenu_3"> 48 <ul> 49 <li><a href="#" id="submenu_a_3_1">二级菜单一</a></li> 50 <li><a href="#" id="submenu_a_3_2">二级菜单二</a></li> 51 <li><a href="#" id="submenu_a_3_3">二级菜单三</a></li> 52 <li><a href="#" id="submenu_a_3_4">二级菜单四</a></li> 53 <li><a href="#" id="submenu_a_3_5">二级菜单五</a></li> 54 </ul> 55 </div> 56 </li> 57 </ul> 58 </div>
读取cookie工具类:

1 //cookie工具类 2 var cookieTool = { 3 //读取cookie 4 getCookie: function(c_name) { 5 if (document.cookie.length > 0) { 6 c_start = document.cookie.indexOf(c_name + "="); 7 if (c_start != -1) { 8 c_start = c_start + c_name.length + 1; 9 c_end = document.cookie.indexOf(";", c_start); 10 if (c_end == -1) { 11 c_end = document.cookie.length; 12 } 13 return unescape(document.cookie.substring(c_start, c_end)); 14 } 15 } 16 return ""; 17 }, 18 //设置cookie 19 setCookie: function(c_name, value, expiredays) { 20 var exdate = new Date(); 21 exdate.setDate(exdate.getDate() + expiredays); //设置日期 22 document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()); 23 }, 24 //删除cookie 25 delCookie: function(c_name) { 26 var exdate = new Date(); 27 exdate.setDate(exdate.getDate() - 1); //昨天日期 28 document.cookie = c_name + "=;expires=" + exdate.toGMTString(); 29 } 30 };
菜单事件绑定:

1 //菜单事件绑定 2 $('.treemenu a').bind('click', function() { 3 var $this = $(this); 4 var id = $this.attr('id'); 5 var $submenu = $this.next('.submenu'); 6 if ($submenu.length > 0) { //是否有子菜单 7 var flag = $(this).next('.submenu:hidden').length > 0 ? true : false; 8 if (flag) { 9 $submenu.show(); 10 } else { 11 $submenu.hide(); 12 } 13 var display = flag ? 'block' : 'none'; 14 cookieTool.setCookie(id, display, 10); 15 } else { 16 cookieTool.setCookie(id, id, 10); 17 var curId = cookieTool.getCookie(id); 18 $('.treemenu').find('.on').removeClass('on').addClass('off'); 19 $('#' + curId).addClass('on'); 20 $('.treemenu a[class="off"]').each(function() { 21 cookieTool.delCookie($(this).attr('id')); //删除其他已选择选项cookie 22 }); 23 } 24 });
页面加载时重新设置菜单
1 //页面加载读取cookies 2 $('.treemenu a').each(function() { 3 showMenu($(this).attr('id')); 4 }); 5 6 7 //读取cookie显示菜单 8 function showMenu(id) { 9 var $this = $('#' + id); 10 var cookie = cookieTool.getCookie(id); 11 if (cookie) { 12 if ($this.next('.submenu').length > 0) { 13 $this.next('.submenu').css('display', cookie); 14 } else { 15 $('#' + cookie).addClass('on'); 16 } 17 } 18 }
完整DEMO:
【JavaScript】刷新不变化树形菜单(多级菜单).zip
注意:chrome本地控制台无法读取cookie,需要在firefox/IE或者服务器环境下测试
作者:GeniusLyzh
出处:http://www.cnblogs.com/GeniusLyzh/
本文链接:https://www.cnblogs.com/GeniusLyzh/p/4062257.html
本文版权归作者和博客园共有,欢迎转载,须保留此段声明,并给出原文链接,谢谢!
如果阅读了本文章,觉得有帮助,欢迎点击右下角推荐
出处:http://www.cnblogs.com/GeniusLyzh/
本文链接:https://www.cnblogs.com/GeniusLyzh/p/4062257.html
本文版权归作者和博客园共有,欢迎转载,须保留此段声明,并给出原文链接,谢谢!
如果阅读了本文章,觉得有帮助,欢迎点击右下角推荐
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战