這個(gè)位置我們也是可以設(shè)置的。在給每個(gè)li添加事件的時(shí)候用到了for里面的參數(shù)i在這里表示0,1,2可以表示標(biāo)題塊之間的相對(duì)位置(lis[i].index = i),這也正是盒子塊之間的相對(duì)位置。我們可以通過(guò)divs[this.index]來(lái)獲取被點(diǎn)擊標(biāo)題對(duì)應(yīng)的盒子。
var divs = document.getElementById("tab").getElementsByTagName("div"); //console.log(divs) for(let i=0; i<lis.length; i++){ lis[i].index = i; lis[i].onclick = function() { for( let n=0; n<lis.length; n++){ lis[n].className = ""; divs[n].className = "hide"; } this.className = "on"; divs[this.index].className = ""; } }
到這里,題目要求的所有效果都實(shí)現(xiàn)了,回頭看看,感覺(jué)不是很難,但是當(dāng)時(shí)在剛看到題目的時(shí)候還是很懵的,不知道如何獲取被點(diǎn)擊的標(biāo)題(想到了冒泡和捕獲,后面還需要對(duì)這個(gè)進(jìn)行學(xué)習(xí)),不知道如何設(shè)置css....,自己還需要更多的學(xué)習(xí)。
——————————分割線—————
很多大佬都指導(dǎo)我說(shuō)之前的方法耗內(nèi)存:用for循環(huán)給每個(gè)li都添加一個(gè)點(diǎn)擊事件。下面,我用事件委托來(lái)更新一下這個(gè)辦法:
window.onload = function() { var uls = document.getElementById('tit'); var lis = uls.getElementsByTagName('li'); var divs = document.getElementById('tab').getElementsByTagName('div'); // console.log(lis) console.log(divs) uls.onclick = function(ec) { for(let i=0; i<lis.length; i++){ lis[i].className = ""; //遍歷每個(gè)li設(shè)置類(lèi)名 divs[i].className = "hide"; } var ev = ev || window.event; var target = ev.target || ev.srcElement; if(target.nodeName.toLowerCase() == 'li'){ target.className = "on"; //自己在每個(gè)li中定義了一個(gè)屬性 data-index divs[target.getAttribute("data-index")].className = ""; console.log(target); } } }
我在html中給每個(gè)li自定了屬性data-index:
<li class="on" data-index="0">房產(chǎn)</li> <li data-index="1">家居</li> <li data-index="2">二手房</li>
再在js中用getAttribute獲取所點(diǎn)擊的li的屬性值
divs[target.getAttribute("data-index")].className = "";
源碼鏈接
總結(jié)
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com