Welcome 微信登录

首页 / 脚本样式 / JavaScript / js 通过cookie实现刷新不变化树形菜单

通过设置cookie来保存树形菜单的状态,在页面加载时重新读取cookie来设置菜单。
菜单的HTML结构:
<div class="treemenu"><ul><li><a href="#" id="treemenu_a_1">一级菜单一</a><div class="submenu" id="submenu_1"><ul><li><a href="subpage/a.html" id="submenu_a_1_1">二级菜单一</a></li><li><a href="subpage/b.html" id="submenu_a_1_2">二级菜单二</a></li><li><a href="#" id="submenu_a_1_3">二级菜单三</a></li><li><a href="#" id="submenu_a_1_4">二级菜单四</a></li><li><a href="#" id="submenu_a_1_5">二级菜单五</a></li></ul></div></li><li><a href="#" id="treemenu_a_2">一级菜单二</a><div class="submenu" id="submenu_2"><ul><li><a href="#" id="submenu_a_2_1">二级菜单一</a><div class="submenu" id="submenu_2_1"><ul><li><a href="#" id="submenu_a_2_1_1">三级菜单一</a></li><li><a href="#" id="submenu_a_2_1_2">三级菜单二</a></li><li><a href="#" id="submenu_a_2_1_3">三级菜单三</a><div class="submenu" id="submenu_2_1_3"><ul><li><a href="#" id="submenu_a_2_1_3_1">四级菜单一</a></li><li><a href="#" id="submenu_a_2_1_3_2">四级菜单二</a></li><li><a href="#" id="submenu_a_2_1_3_3">四级菜单三</a></li></ul></div></li></ul></div></li><li><a href="#" id="submenu_a_2_2">二级菜单二</a></li><li><a href="#" id="submenu_a_2_3">二级菜单三</a></li><li><a href="#" id="submenu_a_2_4">二级菜单四</a></li><li><a href="#" id="submenu_a_2_5">二级菜单五</a></li></ul></div></li><li><a href="#" id="treemenu_a_3">一级菜单三</a><div class="submenu" id="submenu_3"><ul><li><a href="#" id="submenu_a_3_1">二级菜单一</a></li><li><a href="#" id="submenu_a_3_2">二级菜单二</a></li><li><a href="#" id="submenu_a_3_3">二级菜单三</a></li><li><a href="#" id="submenu_a_3_4">二级菜单四</a></li><li><a href="#" id="submenu_a_3_5">二级菜单五</a></li></ul></div></li></ul></div>
读取cookie工具类:

//cookie工具类var cookieTool = {//读取cookiegetCookie: 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;}return unescape(document.cookie.substring(c_start, c_end));}}return "";},//设置cookiesetCookie: function(c_name, value, expiredays) {var exdate = new Date();exdate.setDate(exdate.getDate() + expiredays); //设置日期document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());},//删除cookiedelCookie: function(c_name) {var exdate = new Date();exdate.setDate(exdate.getDate() - 1); //昨天日期document.cookie = c_name + "=;expires=" + exdate.toGMTString();}};
菜单事件绑定:
//菜单事件绑定$(".treemenu a").bind("click", function() {var $this = $(this);var id = $this.attr("id");var $submenu = $this.next(".submenu");if ($submenu.length > 0) { //是否有子菜单var flag = $(this).next(".submenu:hidden").length > 0 ? true : false;if (flag) {$submenu.show();} else {$submenu.hide();}var display = flag ? "block" : "none";cookieTool.setCookie(id, display, 10);} else {cookieTool.setCookie(id, id, 10);var curId = cookieTool.getCookie(id);$(".treemenu").find(".on").removeClass("on").addClass("off");$("#" + curId).addClass("on");$(".treemenu a[class="off"]").each(function() { cookieTool.delCookie($(this).attr("id")); //删除其他已选择选项cookie});}});
页面加载时重新设置菜单
//页面加载读取cookies$(".treemenu a").each(function() {showMenu($(this).attr("id"));});//读取cookie显示菜单function showMenu(id) {var $this = $("#" + id);var cookie = cookieTool.getCookie(id);if (cookie) {if ($this.next(".submenu").length > 0) {$this.next(".submenu").css("display", cookie);} else {$("#" + cookie).addClass("on");}}}
完整DEMO:
【JavaScript】刷新不变化树形菜单(多级菜单).zip
注意:chrome本地控制台无法读取cookie,需要在firefox/IE或者服务器环境下测试