javascript顯示隱藏層比較不錯(cuò)的方法分析
更新時(shí)間:2008年09月30日 00:34:20 作者:
通常的解決辦法是把“答案”當(dāng)作整個(gè)問題容器的子元素,然后點(diǎn)擊父元素上的按鈕后展開對應(yīng)的子元素。通過父子元素的對應(yīng)關(guān)系來匹配標(biāo)題和答案。
這是一個(gè)Q&A的頁面,設(shè)計(jì)師希望能夠點(diǎn)擊相關(guān)的問題后,在它下方顯示對應(yīng)的答案。這是一個(gè)比較常見功能,通常的解決辦法是把“答案”當(dāng)作整個(gè)問題容器的子元素,然后點(diǎn)擊父元素上的按鈕后展開對應(yīng)的子元素。通過父子元素的對應(yīng)關(guān)系來匹配標(biāo)題和答案。
但是當(dāng)初寫html的時(shí)候并沒有考慮到腳本編寫(需求是后加的),所以,答案和標(biāo)題沒有父子關(guān)系可以對應(yīng)。 html代碼如下。
所以,這里需要用到另一種方法來匹配答案和標(biāo)題。我們可以通過捕捉元素的位置來匹配它們。也就是說第一條標(biāo)題,對應(yīng)的肯定是整個(gè)序列中的第一條答案,第二條標(biāo)題對應(yīng)的肯定是第二條答案。 這樣就可以無視html結(jié)構(gòu)來控制它們的對應(yīng)關(guān)系了。
<ul class="qusetionList">
<li class="liHeader"><span class="colABC-A">編號</span><span class="colABC-B">標(biāo)題</span><span class="colABC-C">編輯者/發(fā)問者</span></li>
<li class="liBody"><span class="colABC-A">1</span><span class="colABC-B">想要開小店需要付費(fèi)嗎?</span><span class="colABC-C"><a href="#" title="" class="openLink"></a> 客服</span></li>
<li class="answer"><span class="colABC-B">
現(xiàn)階段於策視其所以不收取任何費(fèi)用,請使用者不用擔(dān)心。<BR>
除了加值服務(wù)的功能模組之外。</span><span class="colABC-C"><a href="#" title="" class="closeLink"></a> 客服</span></li>
<li class="liBody"><span class="colABC-A">2</span><span class="colABC-B">想要開小店需要付費(fèi)嗎?</span><span class="colABC-C"><a href="#" title="" class="openLink"></a> 客服</span></li>
<li class="answer"><span class="colABC-B">
現(xiàn)階段於策視其所以不收取任何費(fèi)用,請使用者不用擔(dān)心。<BR>
除了加值服務(wù)的功能模組之外。</span><span class="colABC-C"><a href="#" title="" class="closeLink"></a> 客服</span></li>
</ul>
腳本解釋:當(dāng)點(diǎn)擊openLink這個(gè)圖標(biāo)時(shí),顯示和openLink在序列中位置相同的answer。這里需要將onclick事件放在閉包里面,等到for循環(huán)結(jié)束后才被激活。如果沒有這層閉包,那不管點(diǎn)擊哪個(gè)openLink,顯示的都將是openLink.length的值。
document.getElementsByClassName = function(eleClassName)
{
var getEleClass = [];//定義一個(gè)數(shù)組
var myclass = new RegExp("\\b"+eleClassName+"\\b");//創(chuàng)建一個(gè)正則表達(dá)式對像
var elem = this.getElementsByTagName("*");//獲取文檔里所有的元素
for(var h=0;h<elem.length;h++)
{
var classes = elem[h].className;//獲取class對像
if (myclass.test(classes)) getEleClass.push(elem[h]);//正則比較,取到想要的CLASS對像
}
return getEleClass;//返回?cái)?shù)組
}
//上面這是捕捉class的方法,我一直用它,復(fù)制過來就OK。
var answer = document.getElementsByClassName("answer");
var openLink = document.getElementsByClassName("openLink");
var closeLink = document.getElementsByClassName("closeLink");
for (i = 0; i< openLink.length ; i++ )
{
(
function(i){
openLink[i].onclick = function (){
var j = i;
answer[j].style.display = "block"
}
closeLink[i].onclick = function (){
var j = i;
answer[j].style.display = "none"
}
}
)(i);
}
但是當(dāng)初寫html的時(shí)候并沒有考慮到腳本編寫(需求是后加的),所以,答案和標(biāo)題沒有父子關(guān)系可以對應(yīng)。 html代碼如下。
所以,這里需要用到另一種方法來匹配答案和標(biāo)題。我們可以通過捕捉元素的位置來匹配它們。也就是說第一條標(biāo)題,對應(yīng)的肯定是整個(gè)序列中的第一條答案,第二條標(biāo)題對應(yīng)的肯定是第二條答案。 這樣就可以無視html結(jié)構(gòu)來控制它們的對應(yīng)關(guān)系了。
復(fù)制代碼 代碼如下:
<ul class="qusetionList">
<li class="liHeader"><span class="colABC-A">編號</span><span class="colABC-B">標(biāo)題</span><span class="colABC-C">編輯者/發(fā)問者</span></li>
<li class="liBody"><span class="colABC-A">1</span><span class="colABC-B">想要開小店需要付費(fèi)嗎?</span><span class="colABC-C"><a href="#" title="" class="openLink"></a> 客服</span></li>
<li class="answer"><span class="colABC-B">
現(xiàn)階段於策視其所以不收取任何費(fèi)用,請使用者不用擔(dān)心。<BR>
除了加值服務(wù)的功能模組之外。</span><span class="colABC-C"><a href="#" title="" class="closeLink"></a> 客服</span></li>
<li class="liBody"><span class="colABC-A">2</span><span class="colABC-B">想要開小店需要付費(fèi)嗎?</span><span class="colABC-C"><a href="#" title="" class="openLink"></a> 客服</span></li>
<li class="answer"><span class="colABC-B">
現(xiàn)階段於策視其所以不收取任何費(fèi)用,請使用者不用擔(dān)心。<BR>
除了加值服務(wù)的功能模組之外。</span><span class="colABC-C"><a href="#" title="" class="closeLink"></a> 客服</span></li>
</ul>
腳本解釋:當(dāng)點(diǎn)擊openLink這個(gè)圖標(biāo)時(shí),顯示和openLink在序列中位置相同的answer。這里需要將onclick事件放在閉包里面,等到for循環(huán)結(jié)束后才被激活。如果沒有這層閉包,那不管點(diǎn)擊哪個(gè)openLink,顯示的都將是openLink.length的值。
復(fù)制代碼 代碼如下:
document.getElementsByClassName = function(eleClassName)
{
var getEleClass = [];//定義一個(gè)數(shù)組
var myclass = new RegExp("\\b"+eleClassName+"\\b");//創(chuàng)建一個(gè)正則表達(dá)式對像
var elem = this.getElementsByTagName("*");//獲取文檔里所有的元素
for(var h=0;h<elem.length;h++)
{
var classes = elem[h].className;//獲取class對像
if (myclass.test(classes)) getEleClass.push(elem[h]);//正則比較,取到想要的CLASS對像
}
return getEleClass;//返回?cái)?shù)組
}
//上面這是捕捉class的方法,我一直用它,復(fù)制過來就OK。
var answer = document.getElementsByClassName("answer");
var openLink = document.getElementsByClassName("openLink");
var closeLink = document.getElementsByClassName("closeLink");
for (i = 0; i< openLink.length ; i++ )
{
(
function(i){
openLink[i].onclick = function (){
var j = i;
answer[j].style.display = "block"
}
closeLink[i].onclick = function (){
var j = i;
answer[j].style.display = "none"
}
}
)(i);
}
您可能感興趣的文章:
- Javascript顯示和隱藏ul列表的方法
- Javascript與jQuery方法的隱藏與顯示
- javascript實(shí)現(xiàn)信息的顯示和隱藏如注冊頁面
- javascript實(shí)現(xiàn)div的顯示和隱藏的小例子
- JavaScript欄目列表隱藏/顯示簡單實(shí)現(xiàn)
- javascript 隱藏/顯示指定的區(qū)域附HTML元素【legend】用法
- javascript 控制 html元素 顯示/隱藏實(shí)現(xiàn)代碼
- javascript 層隱藏和顯示的代碼
- JAVASCRIPT 點(diǎn)擊顯示 隱藏層
- javascript控制層顯示或隱藏的方法
相關(guān)文章
JavaScript Serializer序列化時(shí)間處理示例
JavaScriptSerializer序列化時(shí)間后會把時(shí)間序列化成N進(jìn)制的鬼數(shù)據(jù) ,下面有個(gè)示例,需要的朋友可以了解下2014-07-07Json實(shí)現(xiàn)傳值到后臺代碼實(shí)例
這篇文章主要介紹了Json實(shí)現(xiàn)傳值到后臺代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06JavaScript中Number對象的toFixed() 方法詳解
下面小編就為大家?guī)硪黄狫avaScript中Number對象的toFixed() 方法詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09js數(shù)組刪除問題(splice和delete的用法)
這篇文章主要介紹了js數(shù)組刪除問題(splice和delete的用法),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Javascript實(shí)現(xiàn)hashcode函數(shù)實(shí)現(xiàn)對象比較與原理說明
在JavaScript中,數(shù)值的比較是比較簡單的,使用相等(==)和全等(===)符號基本上可以解決大多數(shù)非對象的比較。但是相等(==)和全等(===)符號在對象 object 的比較上,就不能滿足所有的要求了2023-06-06Bootstrap Scrollspy源碼學(xué)習(xí)
這篇文章主要介紹了Bootstrap Scrollspy源碼學(xué)習(xí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03用ajax實(shí)現(xiàn)的自動(dòng)投票的代碼
用ajax實(shí)現(xiàn)的自動(dòng)投票的代碼...2007-03-03