zl程序教程

您现在的位置是:首页 >  后端

当前栏目

js通过cookie实现刷新不变化树形菜单

JSCookie 实现 通过 刷新 变化 菜单 树形
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或者服务器环境下测试