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”
答案 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
属性,它应该可以正常工作