javascript显示隐藏层

这是一个Q&A的页面,设计师希望能够点击相关的问题后,在它下方显示对应的答案。这是一个比较常见功能,通常的解决办法是把“答案”当作整个问题容器的子元素,然后点击父元素上的按钮后展开对应的子元素。通过父子元素的对应关系来匹配标题和答案。

但是当初写html的时候并没有考虑到脚本编写(需求是后加的),所以,答案和标题没有父子关系可以对应。 html代码如下。

所以,这里需要用到另一种方法来匹配答案和标题。我们可以通过捕捉元素的位置来匹配它们。也就是说第一条标题,对应的肯定是整个序列中的第一条答案,第二条标题对应的肯定是第二条答案。 这样就可以无视html结构来控制它们的对应关系了。

  1. <ul class="qusetionList">
  2.     <li class="liHeader"><span class="colABC-A">編號</span><span class="colABC-B">標題</span><span  class="colABC-C">編輯者/發問者</span></li>
  3.  
  4.     <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>
  5.     <li class="answer"><span class="colABC-B">
  6.     現階段於策視其所以不收取任何費用,請使用者不用擔心。<BR>
  7.     除了加值服務的功能模組之外。</span><span  class="colABC-C"><a href="#" title="" class="closeLink"></a> 客服</span></li>
  8.  
  9.     <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>
  10.     <li class="answer"><span class="colABC-B">
  11.     現階段於策視其所以不收取任何費用,請使用者不用擔心。<BR>
  12.     除了加值服務的功能模組之外。</span><span  class="colABC-C"><a href="#" title="" class="closeLink"></a> 客服</span></li>
  13. </ul>



脚本解释:当点击openLink这个图标时,显示和openLink在序列中位置相同的answer。这里需要将onclick事件放在闭包里面,等到for循环结束后才被激活。如果没有这层闭包,那不管点击哪个openLink,显示的都将是openLink.length的值。

  1. document.getElementsByClassName = function(eleClassName)
  2. {
  3. var getEleClass = [];//定义一个数组
  4. var myclass = new RegExp("\\b"+eleClassName+"\\b");//创建一个正则表达式对像
  5. var elem = this.getElementsByTagName("*");//获取文档里所有的元素
  6. for(var h=0;h<elem.length;h++)
  7. {
  8. var classes = elem[h].className;//获取class对像
  9. if (myclass.test(classes)) getEleClass.push(elem[h]);//正则比较,取到想要的CLASS对像
  10. }
  11. return getEleClass;//返回数组
  12. }
  13. //上面这是捕捉class的方法,我一直用它,复制过来就OK。
  14.  
  15. var answer = document.getElementsByClassName("answer");
  16. var openLink = document.getElementsByClassName("openLink");
  17. var closeLink = document.getElementsByClassName("closeLink");
  18.  
  19. for (i = 0; i< openLink.length ; i++ )
  20. {
  21.         (
  22.         function(i){
  23.                 openLink[i].onclick = function (){
  24.                         var j = i;
  25.                         answer[j].style.display = "block"
  26.                 }
  27.                 closeLink[i].onclick = function (){
  28.                         var j = i;
  29.                         answer[j].style.display = "none"
  30.                 }
  31.         }
  32.         )(i);
  33. }

演示地址

Tags: 07月 23rd, 2008 Posted in JavaScript

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress | Blue Weed by Blog Oh! Blog | Entries (RSS) and Comments (RSS).