通过设置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 = { //读取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; } return unescape(document.cookie.substring(c_start, c_end)); } } return \"\"; }, //设置cookie setCookie: 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()); }, //删除cookie delCookie: 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或者服务器环境下测试
本文地址:https://www.stayed.cn/item/13489
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我