JS仿QQ好友列表展開、收縮功能(第二篇)
在上篇的基礎(chǔ)上繼續(xù)完善,點擊一個li元素,其他li元素上的類名清除掉。
效果圖如下所示:
js:
<script> window.onload = function(){ var list = document.getElementById('list'); var ah2 = list.getElementsByTagName('h2'); var uls = list.getElementsByTagName('ul'); var lis = null;//用于下面的存儲 var arrli = [];// // h2要和下面的ul進(jìn)行匹配,所以我們要用索引值,給h2身上添加索引值 for(var i=0;i<ah2.length;i++){ ah2[i].index = i;//給h2添加索引值,點擊誰就給誰添加索引值 ah2[i].onclick = function(){ if(this.className == ''){//判斷所點擊的h2標(biāo)簽是否有類, //this.index指h2身上的索引數(shù),this指h2,h2的索引值為this.index uls[this.index].style.display = 'block'; this.className = 'active';//給當(dāng)前點擊的h2添加類,更改箭頭方向 }else{ uls[this.index].style.display = 'none'; this.className = ''; } } } // 找到list里的所有ul,共有三個ul,所以用到for循環(huán) for(var i=0;i<uls.length;i++){//找到每一組ul lis = uls[i].getElementsByTagName('li');//找到uls中的所有l(wèi)i元素,存入到lis中,為什么要存一下呢?因為找到的li元素是一組元素的集合,要給每一個元素添加點擊事件,存起來之后要再來一次for循環(huán),for套for中間沒有函數(shù)包著所以得換一個變量 for(var j=0;j<lis.length;j++){//找到每組ul中的所有l(wèi)i arrli.push(lis[j]); //把每個li放到數(shù)組中,因為是要操作一組li中的每個,所以我們把它拎出來放在一起方便操作 } } // 找到每個li之后進(jìn)行點擊事件操作 for(var i=0;i<arrli.length;i++){ arrli[i].onclick = function(){ // 清除所有類名,只給當(dāng)前點擊的添加 // 只保留一個li元素添加類名 // 為什么用的是i呢?因為for套for它們中間有一層函數(shù)隔開(有函數(shù)包含的情況下作用域發(fā)生了改變),所以可以使用同樣的i名稱 for(var i=0;i<arrli.length;i++){ arrli[i].className = '';//去掉點擊所有添加的類 } this.className = 'hover';//給當(dāng)前點擊的li元素添加類名 } } } </script>
注意:
怎么區(qū)分for循環(huán)中有的用 i 有的用 j?
答:①如果是一個for循環(huán),那么用 i 或者 j 哪個都行,一般是用 i .
②如果是兩個for嵌套,那么看兩個for中間有沒有函數(shù)隔開:1.有函數(shù)隔開,那么這兩個for循環(huán)中的變量都可以用 i 。2.沒有函數(shù)隔開,那么這兩個for循環(huán)中的變量不能使用相同的 i 來命名,一個 i ,一個 j .
例一:
下面是兩個嵌套的for循環(huán)中沒有函數(shù)隔開,所以一個是 i ,一個是 j .
for(var i=0;i<uls.length;i++){//找到每一組ul lis = uls[i].getElementsByTagName('li'); for(var j=0;j<lis.length;j++){//找到每組ul中的所有l(wèi)i arrli.push(lis[j]); } }
例二:
也是兩個嵌套的for循環(huán)中,有一個函數(shù)隔開,那么就可以使用同一個 i 來命名。
for(var i=0;i<arrli.length;i++){ arrli[i].onclick = function(){ for(var i=0;i<arrli.length;i++){ arrli[i].className = '';//去掉點擊所有添加的類 } this.className = 'hover';//給當(dāng)前點擊的li元素添加類名 } }
以上所述是小編給大家介紹的JS仿QQ好友列表展開、收縮功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- JS+CSS實現(xiàn)DIV層的展開、收縮效果
- js實現(xiàn)div層緩慢收縮與展開的方法
- vuejs實現(xiàn)折疊面板展開收縮動畫效果
- JS右下角廣告窗口代碼(可收縮、展開及關(guān)閉)
- JavaScript設(shè)置FieldSet展開與收縮
- JS實現(xiàn)固定在右下角可展開收縮DIV層的方法
- 在iframe里的頁面編寫js,實現(xiàn)在父窗口上創(chuàng)建動畫效果展開和收縮的div(不變動iframe父窗口代碼)
- JS仿QQ好友列表展開、收縮功能(第一篇)
- Vue.JS實現(xiàn)垂直方向展開、收縮不定高度模塊的JS組件
- JavaScript實現(xiàn)QQ列表展開收縮擴(kuò)展功能
- javascript使用substring實現(xiàn)的展開與收縮文字功能示例
相關(guān)文章
JavaScript設(shè)計模式之工廠模式和構(gòu)造器模式
這篇文章主要介紹了JavaScript設(shè)計模式之工廠模式和構(gòu)造器模式,本文同時講解了設(shè)計模式的類別如創(chuàng)建型設(shè)計模式、結(jié)構(gòu)型設(shè)計模式、行為設(shè)計模式等內(nèi)容,需要的朋友可以參考下2015-02-02JavaScript實現(xiàn)網(wǎng)頁版貪吃蛇游戲
這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)網(wǎng)頁版貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07JS實現(xiàn)的網(wǎng)頁倒計時數(shù)字時鐘效果
這篇文章主要介紹了JS實現(xiàn)的網(wǎng)頁倒計時數(shù)字時鐘效果,是一款非常實用的javascript倒計時特效,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03詳解Html a標(biāo)簽中href和onclick用法、區(qū)別、優(yōu)先級別
本文主要分享一篇關(guān)于Html A標(biāo)簽中href和onclick用法、區(qū)別、優(yōu)先級別,具有很好的參考價值,有需要了解的朋友可以看看2017-01-01