2014年6月25日 15:36:29
需要關注的是:
1.用cookie保存用戶當前點擊的菜單項,不打擾后端代碼
2.通過數學計算得到要顯示和隱藏的div
3.點擊事件是動態綁定到a標簽上的,因此當dom加載完后,再執行js,也就是寫在onload里
HTML如下:
1 <h3 class="titleH3" id="101">aaaa</h3> 2 <div class="subNav" id="1"> 3 <a href="#">1</a> 4 <a href="#">2</a> 5 <a href="#">3</a> 6 </div> 7 <h3 class="titleH3" id="102">bbbb</h3> 8 <div class="subNav" id="2"> 9 <a href="#">11</a> 10 <a href="#">22</a> 11 <a href="#">33</a> 12 </div>
js如下:
1 function showhide() 2 { 3 //綁定a鏈接的點擊事件 4 //點擊a鏈接的時候將id寫進cookie 5 var arrSubNav = document.getElementsByClassName('subNav'); 6 for (var i = 0; i < arrSubNav.length; i++) { 7 var arrHref = arrSubNav[i].getElementsByTagName('a'); 8 for (var j = 0; j < arrHref.length; j++) { 9 arrHref[j].onclick = function () { 10 var nodeParent = this.parentNode; //獲取a鏈接所在的那個div塊兒的id,注意,此處用this 11 var idParent = nodeParent.getAttribute('id'); 12 document.cookie="userCheck="+idParent+";domain=***.***.com;path=/***"; //用cookie記錄下用戶當前的選擇 13 } 14 } 15 } 16 17 //從cookie里取值,展開指定div 18 userCheck = getUserCheckInfo(); 19 if (userCheck > 0) { 20 for (var i = 0; i < arrSubNav.length; i++ ) { 21 arrSubNav[i].style.display = 'none'; 22 } 23 document.getElementById(userCheck).style.display = 'block'; 24 } else { 25 document.getElementById('3').style.display = 'block'; 26 } 27 28 //點擊標題時展開其下的菜單 29 var arrTitle = document.getElementsByClassName('titleH3'); 30 for (var i = 0; i < arrTitle.length; i++) { 31 arrTitle[i].onclick = function () { 32 var idTitle = this.getAttribute('id'); 33 var idSubNav = idTitle % 100; //根據title的id獲取子菜單div的id 34 35 for (var i = 0; i < arrSubNav.length; i++ ) { 36 arrSubNav[i].style.display = 'none'; 37 } 38 document.getElementById(idSubNav).style.display = 'block'; 39 40 } 41 }; 42 } 43 44 function getUserCheckInfo() 45 { 46 var strCookie = document.cookie; 47 //將多cookie切割為多個名/值對 48 var arrCookie=strCookie.split("; "); 49 var userCheck = '0'; 50 //遍歷cookie數組,處理每個cookie對 51 for(var i=0;i<arrCookie.length;i++) { 52 var arr=arrCookie[i].split("="); 53 if("userCheck"==arr[0]){ 54 userCheck=arr[1]; 55 break; 56 } 57 } 58 return userCheck; 59 }
變量名沒有起好,userCheck應該為userChoice或者userSelected更恰當,他是用來保存用戶點擊的菜單的id的