js通过cookie实现刷新不变化树形菜单
2023-06-13 09:15:30 时间
通过设置cookie来保存树形菜单的状态,在页面加载时重新读取cookie来设置菜单。
菜单的HTML结构:
<divclass="treemenu"> <ul> <li> <ahref="#"id="treemenu_a_1">一级菜单一</a> <divclass="submenu"id="submenu_1"> <ul> <li><ahref="subpage/a.html"id="submenu_a_1_1">二级菜单一</a></li> <li><ahref="subpage/b.html"id="submenu_a_1_2">二级菜单二</a></li> <li><ahref="#"id="submenu_a_1_3">二级菜单三</a></li> <li><ahref="#"id="submenu_a_1_4">二级菜单四</a></li> <li><ahref="#"id="submenu_a_1_5">二级菜单五</a></li> </ul> </div> </li> <li> <ahref="#"id="treemenu_a_2">一级菜单二</a> <divclass="submenu"id="submenu_2"> <ul> <li> <ahref="#"id="submenu_a_2_1">二级菜单一</a> <divclass="submenu"id="submenu_2_1"> <ul> <li><ahref="#"id="submenu_a_2_1_1">三级菜单一</a></li> <li><ahref="#"id="submenu_a_2_1_2">三级菜单二</a></li> <li> <ahref="#"id="submenu_a_2_1_3">三级菜单三</a> <divclass="submenu"id="submenu_2_1_3"> <ul> <li><ahref="#"id="submenu_a_2_1_3_1">四级菜单一</a></li> <li><ahref="#"id="submenu_a_2_1_3_2">四级菜单二</a></li> <li><ahref="#"id="submenu_a_2_1_3_3">四级菜单三</a></li> </ul> </div> </li> </ul> </div> </li> <li><ahref="#"id="submenu_a_2_2">二级菜单二</a></li> <li><ahref="#"id="submenu_a_2_3">二级菜单三</a></li> <li><ahref="#"id="submenu_a_2_4">二级菜单四</a></li> <li><ahref="#"id="submenu_a_2_5">二级菜单五</a></li> </ul> </div> </li> <li> <ahref="#"id="treemenu_a_3">一级菜单三</a> <divclass="submenu"id="submenu_3"> <ul> <li><ahref="#"id="submenu_a_3_1">二级菜单一</a></li> <li><ahref="#"id="submenu_a_3_2">二级菜单二</a></li> <li><ahref="#"id="submenu_a_3_3">二级菜单三</a></li> <li><ahref="#"id="submenu_a_3_4">二级菜单四</a></li> <li><ahref="#"id="submenu_a_3_5">二级菜单五</a></li> </ul> </div> </li> </ul> </div>
读取cookie工具类:
//cookie工具类 varcookieTool={ //读取cookie getCookie:function(c_name){ if(document.cookie.length>0){ c_start=document.cookie.indexOf(c_name+"="); if(c_start!=-1){ c_start=c_start+c_name.length+1; c_end=document.cookie.indexOf(";",c_start); if(c_end==-1){ c_end=document.cookie.length; } returnunescape(document.cookie.substring(c_start,c_end)); } } return""; }, //设置cookie setCookie:function(c_name,value,expiredays){ varexdate=newDate(); exdate.setDate(exdate.getDate()+expiredays);//设置日期 document.cookie=c_name+"="+escape(value)+((expiredays==null)?"":";expires="+exdate.toGMTString()); }, //删除cookie delCookie:function(c_name){ varexdate=newDate(); exdate.setDate(exdate.getDate()-1);//昨天日期 document.cookie=c_name+"=;expires="+exdate.toGMTString(); } };
菜单事件绑定:
//菜单事件绑定 $(".treemenua").bind("click",function(){ var$this=$(this); varid=$this.attr("id"); var$submenu=$this.next(".submenu"); if($submenu.length>0){//是否有子菜单 varflag=$(this).next(".submenu:hidden").length>0?true:false; if(flag){ $submenu.show(); }else{ $submenu.hide(); } vardisplay=flag?"block":"none"; cookieTool.setCookie(id,display,10); }else{ cookieTool.setCookie(id,id,10); varcurId=cookieTool.getCookie(id); $(".treemenu").find(".on").removeClass("on").addClass("off"); $("#"+curId).addClass("on"); $(".treemenua[class="off"]").each(function(){ cookieTool.delCookie($(this).attr("id"));//删除其他已选择选项cookie }); } });
页面加载时重新设置菜单
//页面加载读取cookies $(".treemenua").each(function(){ showMenu($(this).attr("id")); }); //读取cookie显示菜单 functionshowMenu(id){ var$this=$("#"+id); varcookie=cookieTool.getCookie(id); if(cookie){ if($this.next(".submenu").length>0){ $this.next(".submenu").css("display",cookie); }else{ $("#"+cookie).addClass("on"); } } }
完整DEMO:
注意:chrome本地控制台无法读取cookie,需要在firefox/IE或者服务器环境下测试
相关文章
- js 倒计时 到期自动隐藏 滑动到指定位置显示 默认cookie记录暂不显示的时间段
- 清除cookie的方法_js设置cookie
- JS跳转代码_js中跳转页面路径
- Nest.js 这么大的项目是怎么优化 ts 编译性能的?
- clipboard.js:最轻便的复制页面内容到剪切板的JS
- js保存,获取,删除cookie的操作详解编程语言
- JS动态引入js、CSS动态创建script/link/style标签详解编程语言
- js的正则对象详解编程语言
- 使用JS实现Redis数据读取(js读取redis)
- 用SQL Server和JS实现数据库管理技术(sqlserver.js)
- JS技术连接Oracle数据库实现数据交互(js连接oracle实例)
- 写入cookie的JavaScript代码库cookieLibrary.js
- js打印纸函数代码(递归)
- JS函数验证总结(方便js客户端输入验证)
- js删除所有的cookie的代码
- js静态方法与实例方法分析
- js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
- js获取URL的参数的方法(getQueryString)示例
- 如何动态的导入js文件具体该怎么实现
- Thinkphp搭建包括JS多语言的多语言项目实现方法
- node.js中的http.response.getHeader方法使用说明
- jquery.cookie.js使用指南
- js使用removeChild方法动态删除div元素