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 相关文章推荐
Javascript 表单之间的数据传递代码
Dec 04 Javascript
关于JS管理作用域的问题
Apr 10 Javascript
纯CSS3代码实现滑动开关效果
Aug 19 Javascript
基于js中的原型、继承的一些想法
Aug 10 Javascript
Node.js的文件权限及读写flag详解
Oct 11 Javascript
js图片延迟加载(Lazyload)三种实现方式
Mar 01 Javascript
Node.js 基础教程之全局对象
Aug 06 Javascript
利用JS hash制作单页Web应用的方法详解
Oct 10 Javascript
cnpm加速Angular项目创建的方法
Sep 07 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
Aug 20 Javascript
js tab栏切换代码实例解析
Sep 03 Javascript
Vue路由权限控制解析
Nov 09 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判断linux下程序问题实例
2015/07/09 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
wxPython实现绘图小例子
2019/11/19 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
应征英语教师求职信
2013/11/27 职场文书
护士的岗位职责
2013/12/04 职场文书
户外活动策划方案
2014/03/12 职场文书
交通安全寄语大全
2014/04/08 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
开学典礼演讲稿
2014/05/23 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
2015年市场部工作总结
2015/04/30 职场文书
仙境之桥观后感
2015/06/16 职场文书
创业计划书之熟食店
2019/10/16 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
python实现求纯色彩图像的边框
2021/04/08 Python
Python 图片添加美颜效果
2022/04/28 Python
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技