js 通過cookie實現(xiàn)刷新不變化樹形菜單
更新時間:2014年10月30日 17:03:13 投稿:whsnow
通過設(shè)置cookie來保存樹形菜單的狀態(tài),在頁面加載時重新讀取cookie來設(shè)置菜單
通過設(shè)置cookie來保存樹形菜單的狀態(tài),在頁面加載時重新讀取cookie來設(shè)置菜單。
菜單的HTML結(jié)構(gòu):
<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 "";
},
//設(shè)置cookie
setCookie: function(c_name, value, expiredays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays); //設(shè)置日期
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
});
}
});
頁面加載時重新設(shè)置菜單
//頁面加載讀取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或者服務(wù)器環(huán)境下測試
您可能感興趣的文章:
相關(guān)文章
JavaScript實現(xiàn)動態(tài)刪除列表框值的方法
這篇文章主要介紹了JavaScript實現(xiàn)動態(tài)刪除列表框值的方法,涉及javascript針對select列表框的遍歷與刪除操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08
webpack4 optimization使用總結(jié)
這篇文章主要介紹了webpack4 optimization使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解
從 ES2019 中開始引入了一種扁平化數(shù)組的新方法,可以展平任何深度的數(shù)組,這篇文章主要介紹了JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解,需要的朋友可以參考下2023-06-06

