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