Javascript切换可见性多个div

时间:2013-07-14 18:36:54

标签: javascript html toggle visibility

http://blog.movalog.com/a/javascript-toggle-visibility/

这是一个包含一些代码和脚本的页面,我在我的网站中使用图片库,但是当尝试切换多个div的可见性时,它只适用于第一个。有人可以修理它与多个div的工作,我不知道js :))

这是javascript

<script type="text/javascript">
<!--
    function toggle_visibility(id) {
       var e = document.getElementById(id);
       if(e.style.display == 'block')
          e.style.display = 'none';
       else
          e.style.display = 'block';
    }
//-->
</script>

这是链接的HTML代码

<tr><td><a href="#" onclick="toggle_visibility('nyc');">New York</a></td>
<td><a href="#" onclick="toggle_visibility('photoshop');">Photoshop Work</td>
<td><a href="#" onclick="toggle_visibility('photography');">Photography</td></tr>
<tr><td><a href="#" onclick="toggle_visibility('art');">Art Projects</td></tr>

等一下,这可能不起作用,因为它试图通过“id”属性访问多个div的属性,它是否可以使用类属性,如果是这样,我只需更改它所说的java脚本“id”到“class”

4 个答案:

答案 0 :(得分:6)

您似乎正在尝试类似

的内容
<div id="a"></div>
<div id="a"></div>

toggle_visibility('a');

问题是每个id在文档中必须是唯一的,因此document.getElementById返回单个元素,而不是元素集合。

然后,如果你想拥有多个具有相同id的元素,你应该使用类。

<div class="a"></div>
<div class="a"></div>


function toggle_visibility(cl){
   var els = document.getElementsByClassName(cl);
   for(var i=0; i<els.length; ++i){
      var s = els[i].style;
      s.display = s.display==='none' ? 'block' : 'none';
   };
}
toggle_visibility('a');

如果您想使其适用于多个类,请使用

var toggle_visibility = (function(){
   function toggle(cl){
       var els = document.getElementsByClassName(cl);
       for(var i=0; i<els.length; ++i){
          var s = els[i].style;
          s.display = s.display==='none' ? 'block' : 'none';
       };
   }
   return function(cl){
      if(cl instanceof Array){
         for(var i=0; i<cl.length; ++i){
            toggle(cl[i]);
         }
      }else{
         toggle(cl);
      }
   };
})();
toggle_visibility('myclass');
toggle_visibility(['myclass1','myclass2','myclass3']);

答案 1 :(得分:4)

您可以使用

function toggle_visibility(id) {
   function toggle(id){
      var el = document.getElementById(id);
      el.style.display = el.style.display==='none' ? 'block' : 'none';
   }
   if(id instanceof Array){
      for(var i=0; i<id.length; ++i){
         toggle(id[i]);
      }
   }else{
      toggle(id);
   }
}

并称之为

toggle_visibility('myid');
toggle_visibility(['myid1','myid2','myid3']);

另一种可能的方法是使用arguments变量,但这可能会降低代码的速度

function toggle_visibility() {
   function toggle(id){
      var el = document.getElementById(id);
      el.style.display = el.style.display==='none' ? 'block' : 'none';
   }
   for(var i=0; i<arguments.length; ++i){
      toggle(arguments[i]);
   }
}

并称之为

toggle_visibility('myid');
toggle_visibility('myid1','myid2','myid3');

如果您每次致电toggle时都不想创建功能toggle_visibility(感谢@David Thomas),您可以使用

var toggle_visibility = (function(){
   function toggle(id){
      var el = document.getElementById(id);
      el.style.display = el.style.display==='none' ? 'block' : 'none';
   }
   return function(id){
      if(id instanceof Array){
         for(var i=0; i<id.length; ++i){
            toggle(id[i]);
         }
      }else{
         toggle(id);
      }
   };
})();
toggle_visibility('myid');
toggle_visibility(['myid1','myid2','myid3']);

或者

var toggle_visibility = (function(){
   function toggle(id){
      var el = document.getElementById(id);
      el.style.display = el.style.display==='none' ? 'block' : 'none';
   }
   return function(){
      for(var i=0; i<arguments.length; ++i){
         toggle(arguments[i]);
      }
   };
})();
toggle_visibility('myid');
toggle_visibility('myid1','myid2','myid3');

答案 2 :(得分:0)

您需要遍历一个id列表或使用类名作为toggle_visibilty的参数----这意味着您必须编辑该函数。看起来你现在只在一个元素上调用toggle_visibility。

jQuery使这种事情变得更容易:

  <code>
  //selects all elements with class="yourClassName"
  jQuery(".yourClassName").toggle();

  //select all divs
   jQuery("div").toogle();

  //select all divs inside a container with id="myId"
 jQuery("#myId > div").toggle();
 </code>

答案 3 :(得分:0)

你的代码中有一个非常愚蠢的错误.. 在td标签id ='nyc'等中添加id属性,它应该可以正常工作