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

前端技术 2023/09/05 JavaScript

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

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。