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


Posted in Javascript onOctober 30, 2014

通过设置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:

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

Javascript 相关文章推荐
从sohu弄下来的flash中展示图片的代码
Apr 27 Javascript
javascript时区函数介绍
Sep 14 Javascript
Javascript解析URL方法详解
Dec 05 Javascript
jquery中checkbox全选失效的解决方法
Dec 26 Javascript
jquery结合CSS使用validate实现漂亮的验证
Jan 29 Javascript
js简单实现Select互换数据的方法
Aug 17 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
Oct 25 Javascript
微信小程序 石头剪刀布实例代码
Jan 04 Javascript
使用nvm管理不同版本的node与npm的方法
Oct 31 Javascript
浅谈redux, koa, express 中间件实现对比解析
May 23 Javascript
JS实现放烟花效果
Mar 10 Javascript
js实现点击选项置顶动画效果
Aug 25 Javascript
判断字符串的长度(优化版)中文占两个字符
Oct 30 #Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 #Javascript
D3.js 从P元素的创建开始(显示可加载数据)
Oct 30 #Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
Oct 30 #Javascript
如何调试异步加载页面里包含的js文件
Oct 30 #Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 #Javascript
js中style.display=&quot;&quot;无效的解决方法
Oct 30 #Javascript
You might like
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
大学生职业规划论文
2014/01/11 职场文书
商场促销活动总结
2014/07/10 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
抗洪救灾标语
2014/10/08 职场文书
农村老人去世追悼词
2015/06/23 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL