zoukankan      html  css  js  c++  java
  • cookie实现刷新不变化树形菜单

    通过设置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     //设置cookie
    19     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     //删除cookie
    25     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')); //删除其他已选择选项cookie
    22             });
    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或者服务器环境下测试

  • 相关阅读:
    增强的for循环(或foreach)
    XMLHTTP使用具体解释
    数据转换
    JS来推断文本框内容改变事件
    Java学习笔记——JDBC之PreparedStatement类中“预编译”的综合应用
    同类软件大比拼
    Java实现 蓝桥杯 历届试题 最大子阵
    Java实现 蓝桥杯 历届试题 最大子阵
    Java实现 蓝桥杯 历届试题 最大子阵
    Java实现 蓝桥杯 历届试题 最大子阵
  • 原文地址:https://www.cnblogs.com/GeniusLyzh/p/4062257.html
Copyright © 2011-2022 走看看