[JavaScript]cookie实现刷新不变化树形菜单

通过设置cookie来保存树形菜单的状态,在页面加载时重新读取cookie来设置菜单。

菜单的HTML结构:

 1 <div class="treemenu">
 2          <ul>
 3              <li>
 4                  <a href="#" id="treemenu_a_1">一级菜单一</a>
 5                  <div class="submenu" id="submenu_1">
 6                      <ul>
 7                          <li><a href="subpage/a.html" id="submenu_a_1_1">二级菜单一</a></li>
 8                          <li><a href="subpage/b.html" id="submenu_a_1_2">二级菜单二</a></li>
 9                          <li><a href="#" id="submenu_a_1_3">二级菜单三</a></li>
10                          <li><a href="#" id="submenu_a_1_4">二级菜单四</a></li>
11                          <li><a href="#" id="submenu_a_1_5">二级菜单五</a></li>
12                      </ul>
13                  </div>
14              </li>
15              <li>
16                  <a href="#" id="treemenu_a_2">一级菜单二</a>
17                  <div class="submenu" id="submenu_2">
18                      <ul>
19                          <li>
20                              <a href="#" id="submenu_a_2_1">二级菜单一</a>
21                             <div class="submenu" id="submenu_2_1">
22                                 <ul>
23                                     <li><a href="#" id="submenu_a_2_1_1">三级菜单一</a></li>
24                                     <li><a href="#" id="submenu_a_2_1_2">三级菜单二</a></li>
25                                     <li>
26                                         <a href="#" id="submenu_a_2_1_3">三级菜单三</a>
27                                         <div class="submenu" id="submenu_2_1_3">
28                                             <ul>
29                                                 <li><a href="#" id="submenu_a_2_1_3_1">四级菜单一</a></li>
30                                                 <li><a href="#" id="submenu_a_2_1_3_2">四级菜单二</a></li>
31                                                 <li><a href="#" id="submenu_a_2_1_3_3">四级菜单三</a></li>
32                                             </ul>
33                                         </div>
34                                     </li>
35                                 </ul>
36                             </div>
37                          </li>
38                          <li><a href="#" id="submenu_a_2_2">二级菜单二</a></li>
39                          <li><a href="#" id="submenu_a_2_3">二级菜单三</a></li>
40                          <li><a href="#" id="submenu_a_2_4">二级菜单四</a></li>
41                          <li><a href="#" id="submenu_a_2_5">二级菜单五</a></li>
42                      </ul>
43                  </div>
44              </li>
45              <li>
46                  <a href="#" id="treemenu_a_3">一级菜单三</a>
47                  <div class="submenu" id="submenu_3">
48                      <ul>
49                          <li><a href="#" id="submenu_a_3_1">二级菜单一</a></li>
50                          <li><a href="#" id="submenu_a_3_2">二级菜单二</a></li>
51                          <li><a href="#" id="submenu_a_3_3">二级菜单三</a></li>
52                          <li><a href="#" id="submenu_a_3_4">二级菜单四</a></li>
53                          <li><a href="#" id="submenu_a_3_5">二级菜单五</a></li>
54                      </ul>
55                  </div>
56              </li>
57          </ul>
58      </div>

读取cookie工具类:

 1 //cookie工具类
 2 var cookieTool = {
 3     //读取cookie
 4     getCookie: function(c_name) {
 5         if (document.cookie.length > 0) {
 6             c_start = document.cookie.indexOf(c_name + "=");
 7             if (c_start != -1) {
 8                 c_start = c_start + c_name.length + 1;
 9                 c_end = document.cookie.indexOf(";", c_start);
10                 if (c_end == -1) {
11                     c_end = document.cookie.length;
12                 }
13                 return unescape(document.cookie.substring(c_start, c_end));
14             }
15         }
16         return "";
17     },
18     //设置cookie
19     setCookie: function(c_name, value, expiredays) {
20         var exdate = new Date();
21         exdate.setDate(exdate.getDate() + expiredays); //设置日期
22         document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
23     },
24     //删除cookie
25     delCookie: function(c_name) {
26         var exdate = new Date();
27         exdate.setDate(exdate.getDate() - 1); //昨天日期
28         document.cookie = c_name + "=;expires=" + exdate.toGMTString();
29     }
30 };

菜单事件绑定:

 1 //菜单事件绑定
 2     $(‘.treemenu a‘).bind(‘click‘, function() {
 3         var $this = $(this);
 4         var id = $this.attr(‘id‘);
 5         var $submenu = $this.next(‘.submenu‘);
 6         if ($submenu.length > 0) { //是否有子菜单
 7             var flag = $(this).next(‘.submenu:hidden‘).length > 0 ? true : false;
 8             if (flag) {
 9                 $submenu.show();
10             } else {
11                 $submenu.hide();
12             }
13             var display = flag ? ‘block‘ : ‘none‘;
14             cookieTool.setCookie(id, display, 10);
15         } else {
16             cookieTool.setCookie(id, id, 10);
17             var curId = cookieTool.getCookie(id);
18             $(‘.treemenu‘).find(‘.on‘).removeClass(‘on‘).addClass(‘off‘);
19             $(‘#‘ + curId).addClass(‘on‘);
20             $(‘.treemenu a[class="off"]‘).each(function() {
21                 cookieTool.delCookie($(this).attr(‘id‘)); //删除其他已选择选项cookie
22             });
23         }
24     });

页面加载时重新设置菜单

 1 //页面加载读取cookies
 2     $(‘.treemenu a‘).each(function() {
 3         showMenu($(this).attr(‘id‘));
 4     });
 5
 6
 7 //读取cookie显示菜单
 8 function showMenu(id) {
 9     var $this = $(‘#‘ + id);
10     var cookie = cookieTool.getCookie(id);
11     if (cookie) {
12         if ($this.next(‘.submenu‘).length > 0) {
13             $this.next(‘.submenu‘).css(‘display‘, cookie);
14         } else {
15             $(‘#‘ + cookie).addClass(‘on‘);
16         }
17     }
18 }

完整DEMO:

【JavaScript】刷新不变化树形菜单(多级菜单).zip

注意:chrome本地控制台无法读取cookie,需要在firefox/IE或者服务器环境下测试

时间: 2024-08-01 10:25:53

[JavaScript]cookie实现刷新不变化树形菜单的相关文章

用dtree实现树形菜单 dtree使用说明

http://www.jb51.net/article/28566.htm 准备工作: 请从脚本之家http://www.jb51.net/jiaoben/31974.html下载dtree.zip文件 dtree.zip压缩包介绍: dtree是一个由JavaScript编写成的简单的树形菜单组件,目前免费并且开源. 目前有很多的树形菜单组件(比如ext),dtree是一种简单易懂的js组件, 不需要复杂的操作即可生产,同时支持动态从数据库引入数据 解压后有以下几部分: img文件夹: 包含树

ExtJs Treepanel刷新树形菜单

在之前的一次项目开发学习过程中,我需要实现一个功能,就是点击导航栏的链接后左侧树形菜单自动生成对应的菜单项.当时这个问题困扰了我很长一段时间. 后来,在看了ExtJs官方的文档及Demo后一下恍然大悟. 我们来认真分析一下要实现这个功能就是让树形菜单整个刷新. 首先来看看官方的Demo里面是怎么写的: 后台Default.aspx.cs文件中的关键代码:    [DirectMethod]     public string RefreshMenu()     {         Ext.Net

JavaScript - 高级树形菜单实例

简单的树形菜单 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

javascript 树形菜单

1. [代码][JavaScript]代码     var ME={ini:{i:true,d:{},d1:{},h:0,h1:0,h2:0},html:function(da,f){var s='<ul'+(f?' class="f"':'')+'>';for(var i=0,l=da.length;i<l;i++){if(typeof(da[i].pid)=='object'){s+='<li><button type="button&

上一个树形菜单的改进,增添了数据绑定功能而非仅仅的jq特效

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script src="js/jquery-3.2.1.min.js" type="text/javascript" charset="utf-8"></script> <style typ

Jquery Easy-UI 树形菜单的运用

一.树形菜单的右键标签 期中增加同级机构.增加下属机构.修改.删除分别是调用了addNode(),del()等方法. <div id="menuTree" class="easyui-menu" style="width: 120px;"> <SecurityTag:Authorize ID="Authorize12" runat="server" FunctionID="fun

实用的树形菜单控件tree

 jQuery plugin: Treeview 这个插件能够把无序列表转换成可展开与收缩的Tree. jQuery plugin: Treeview  jQuery  jstree jsTree是一个基于jQuery的Tree控件.支持XML,JSON,Html三种数据源.提供创建,重命名,移动,删除,拖\放节点操作.可以自己自定义创建,删除,嵌套,重命名,选择节点的规则.在这些操作上可以添加多种监听事件.  jstree  jQuery UI Widgets  FileTreePanel F

使用jquery实现的多级树形菜单代码实例

使用jquery实现的多级树形菜单代码实例:树形菜单在网站中有大量的应用,这当然是因为它的独特优点,首先它可以有效的组织数据,使分类更为清晰明了,通常情况下树形菜单是可以折叠的,这样可以以更小的空间容纳更多的数据,下面就详细介绍一个使用jquery实现的属性菜单.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author&q

Unity UGUI自定义树形菜单(TreeView)

先上几张效果图:          如果你需要的也是这种效果,那你就来对地方了! 目前,我们这个树形菜单展现出来的功能如下: 1.可以动态配置数据源: 2.点击每个元素的上下文菜单按钮(也就是图中的三角形按钮),可以收缩或展开它的子元素: 3.可以单独判断某一元素的复选框是否被勾选,或者直接获取当前树形菜单中所有被勾选的元素: 4.树形菜单统一控制其下所有子元素按钮的事件分发: 5.可自动调节的滚动视野边缘,根据当前可见的子元素数量进行横向以及纵向的伸缩: 一.首先,我们先制作子元素的模板(Te