通过设置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或者服务器环境下测试
本文向大家介绍JS+CSS实现TreeMenu二级树形菜单完整实例,包括了JS+CSS实现TreeMenu二级树形菜单完整实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS+CSS实现TreeMenu二级树形菜单。分享给大家供大家参考。具体如下: 这是一款二级树形菜单示例:CSS TreeMenu ,非常漂亮的树形菜单,用在网站右侧比较合适。 运行效果截图如下: 在线演示地址如下:
本文向大家介绍vue实现树形菜单效果,包括了vue实现树形菜单效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了vue实现树形菜单效果展示的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍js实现页面刷新滚动条位置不变,包括了js实现页面刷新滚动条位置不变的使用技巧和注意事项,需要的朋友参考一下 今天因为这个问题困扰了很久网上的例子都尝试没效果,后来发现一点原来是内容最外层没有div的原因 以上就是本文的全部内容,希望对大家有所帮助,同时也希望多多支持呐喊教程!
本文向大家介绍Vue2递归组件实现树形菜单,包括了Vue2递归组件实现树形菜单的使用技巧和注意事项,需要的朋友参考一下 今天看了老长时间递归组件,官方给的教程太简便了,根本看不出到底怎么用。于是自己查网摸索了一下,这儿只把核心思想写出来。 效果如下图,点击后打开二级菜单,再点击后打开三级。 由于每次递归组件,就相当于实例化了一次组件。所有写在组件data中的值都是该组件专属的。 树状结构: 我
本文向大家介绍vue 实现的树形菜的实例代码,包括了vue 实现的树形菜的实例代码的使用技巧和注意事项,需要的朋友参考一下 下面一段代码给大家介绍vue 实现的树形菜单功能,具体代码如下所示: 总结 以上所述是小编给大家介绍的vue 实现的树形菜的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!
本文向大家介绍JS实现无限级网页折叠菜单(类似树形菜单)效果代码,包括了JS实现无限级网页折叠菜单(类似树形菜单)效果代码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现无限级网页折叠菜单(类似树形菜单)效果代码。分享给大家供大家参考。具体如下: 这是一款超不错的网页折叠菜单,采用JavaScript实现。折叠菜单是大家比较常见到的一种菜单形式,可广泛应用于管理系统、后台左侧、产品
pre { white-space: pre-wrap; } 当在一个应用中使用树(Tree)插件,拖拽(drag)和放置(drop)功能要求允许用户改变节点位置。启用拖拽(drag)和放置(drop)操作,所有您需要做的就是把树(Tree)插件的 'dnd' 属性设置为 true。 创建树形菜单(Tree) $('#tt').tree({ dnd: true,
pre { white-space: pre-wrap; } 本教程向您展示如何附加节点到树形菜单(Tree)。我们将创建一个包含水果和蔬菜节点的食品树,然后添加一些其他水果到已存在的水果节点。 创建食品树 首先,我们创建食品树,代码如下所示: <div> <ul id="tt" url="tree_data.json"></ul> </div> 请注意,树(T