通过设置cookie来保存树形菜单的状态,在页面加载时重新读取cookie来设置菜单。
菜单的HTML结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
< 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工具类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
//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();
}
};
|
菜单事件绑定:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
//菜单事件绑定
$( '.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
});
}
});
|
页面加载时重新设置菜单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//页面加载读取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或者服务器环境下测试