通过设置cookie来保存树形菜单的状态,在页面加载时重新读取cookie来设置菜单。
菜单的HTML结构:
1 <div class="treemenu"> 2 <ul> 3 <li> 4 <a href="#" id="treemenu_a_1">一级菜单一</a> 5 <div class="submenu" id="submenu_1"> 6 <ul> 7 <li><a href="subpage/a.html" id="submenu_a_1_1">二级菜单一</a></li> 8 <li><a href="subpage/b.html" id="submenu_a_1_2">二级菜单二</a></li> 9 <li><a href="#" id="submenu_a_1_3">二级菜单三</a></li>10 <li><a href="#" id="submenu_a_1_4">二级菜单四</a></li>11 <li><a href="#" id="submenu_a_1_5">二级菜单五</a></li>12 </ul>13 </div>14 </li>15 <li>16 <a href="#" id="treemenu_a_2">一级菜单二</a>17 <div class="submenu" id="submenu_2">18 <ul>19 <li>20 <a href="#" id="submenu_a_2_1">二级菜单一</a>21 <div class="submenu" id="submenu_2_1">22 <ul>23 <li><a href="#" id="submenu_a_2_1_1">三级菜单一</a></li>24 <li><a href="#" id="submenu_a_2_1_2">三级菜单二</a></li>25 <li>26 <a href="#" id="submenu_a_2_1_3">三级菜单三</a>27 <div class="submenu" id="submenu_2_1_3">28 <ul>29 <li><a href="#" id="submenu_a_2_1_3_1">四级菜单一</a></li>30 <li><a href="#" id="submenu_a_2_1_3_2">四级菜单二</a></li>31 <li><a href="#" id="submenu_a_2_1_3_3">四级菜单三</a></li>32 </ul>33 </div>34 </li>35 </ul>36 </div>37 </li>38 <li><a href="#" id="submenu_a_2_2">二级菜单二</a></li>39 <li><a href="#" id="submenu_a_2_3">二级菜单三</a></li>40 <li><a href="#" id="submenu_a_2_4">二级菜单四</a></li>41 <li><a href="#" id="submenu_a_2_5">二级菜单五</a></li>42 </ul>43 </div>44 </li>45 <li>46 <a href="#" id="treemenu_a_3">一级菜单三</a>47 <div class="submenu" id="submenu_3">48 <ul>49 <li><a href="#" id="submenu_a_3_1">二级菜单一</a></li>50 <li><a href="#" id="submenu_a_3_2">二级菜单二</a></li>51 <li><a href="#" id="submenu_a_3_3">二级菜单三</a></li>52 <li><a href="#" id="submenu_a_3_4">二级菜单四</a></li>53 <li><a href="#" id="submenu_a_3_5">二级菜单五</a></li>54 </ul>55 </div>56 </li>57 </ul>58 </div>View Code
读取cookie工具类:
1 //cookie工具类 2 var cookieTool = { 3 //读取cookie 4 getCookie: function(c_name) { 5 if (document.cookie.length > 0) { 6 c_start = document.cookie.indexOf(c_name + "="); 7 if (c_start != -1) { 8 c_start = c_start + c_name.length + 1; 9 c_end = document.cookie.indexOf(";", c_start);10 if (c_end == -1) {11 c_end = document.cookie.length;12 }13 return unescape(document.cookie.substring(c_start, c_end));14 }15 }16 return "";17 },18 //设置cookie19 setCookie: function(c_name, value, expiredays) {20 var exdate = new Date();21 exdate.setDate(exdate.getDate() + expiredays); //设置日期22 document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());23 },24 //删除cookie25 delCookie: function(c_name) {26 var exdate = new Date();27 exdate.setDate(exdate.getDate() - 1); //昨天日期28 document.cookie = c_name + "=;expires=" + exdate.toGMTString();29 }30 };View Code
菜单事件绑定:
1 //菜单事件绑定 2 $('.treemenu a').bind('click', function() { 3 var $this = $(this); 4 var id = $this.attr('id'); 5 var $submenu = $this.next('.submenu'); 6 if ($submenu.length > 0) { //是否有子菜单 7 var flag = $(this).next('.submenu:hidden').length > 0 ? true : false; 8 if (flag) { 9 $submenu.show();10 } else {11 $submenu.hide();12 }13 var display = flag ? 'block' : 'none';14 cookieTool.setCookie(id, display, 10);15 } else {16 cookieTool.setCookie(id, id, 10);17 var curId = cookieTool.getCookie(id);18 $('.treemenu').find('.on').removeClass('on').addClass('off');19 $('#' + curId).addClass('on');20 $('.treemenu a[class="off"]').each(function() { 21 cookieTool.delCookie($(this).attr('id')); //删除其他已选择选项cookie22 });23 }24 });View Code
页面加载时重新设置菜单
1 //页面加载读取cookies 2 $('.treemenu a').each(function() { 3 showMenu($(this).attr('id')); 4 }); 5 6 7 //读取cookie显示菜单 8 function showMenu(id) { 9 var $this = $('#' + id);10 var cookie = cookieTool.getCookie(id);11 if (cookie) {12 if ($this.next('.submenu').length > 0) {13 $this.next('.submenu').CSS('display', cookie);14 } else {15 $('#' + cookie).addClass('on');16 }17 }18 }
完整DEMO:
【javaScript】刷新不变化树形菜单(多级菜单).zip
注意:Chrome本地控制台无法读取cookie,需要在Firefox/IE或者服务器环境下测试
新闻热点
疑难解答