function showtable(s)
{
for(var i=1;i<=4;i++)
{
var obj = document.getElementById("v" + i);
if(s == i)
obj.style.display = "none";
else
obj.style.display = "";
}
}
{
for(var i=1;i<=4;i++)
{
var obj = document.getElementById("v" + i);
if(s == i)
obj.style.display = "none";
else
obj.style.display = "";
}
}
....
</table>
<table id=v1 style=display:none>
....
</table>
<table id=v1 style=display:none>
....
</table>
<table id=v1 style=display:none>
....
</table>function showtable(s)
{
var aa = document.getElementsByName("v1");
for(var i=1;i<aa.length;i++)aa[i].style.display = "none";
a[s].style.display="";
}
{
var aa = document.getElementsByName("v1");
for(var i=0;i<aa.length;i++)aa[i].style.display = "none";
a[s-1].style.display="";
}
1,可以象上面朋友写的那样,每次将要显示的块的style.display="block",其余的用循环设置style.display="none".但这样有个明显的缺点是执行效率比较低。但也有个优点是比较可靠,可以确保一组中只有一个被显示。
2,先将所要求的一组元素其中一个显示,其余的隐藏,并用一个变量(叫做当前变量)保存当前显示的元素的id.
然后要显示其它同组元素时,只需要隐藏当前元素,显示目标元素,并改变当前变量的值。例子如下:
<head>
<style>
.mygroupdiv{width:300px;height:300px;border:1px solid red;}
</style>
<script language=javascript>
curdivid="div1";
function showdiv(divid){
if(divid !=curdivid){
document.getElementById(curdivid).style.display="none";
document.getElementById(divid).style.display="block";
curdivid=divid;
}
}
</script>
</head>
<body>
<select onchange="showdiv(this.value)">
<option value="div1">显示div1</option>
<option value="div2">显示div2</option>
<option value="div3">显示div3</option>
<option value="div4">显示div4</option>
</select>
<div id=div1 class=mygroupdiv style="display:block">div1</div>
<div id=div2 class=mygroupdiv style="display:none;">div2</div>
<div id=div3 class=mygroupdiv style="display:none;">div3</div>
<div id=div4 class=mygroupdiv style="display:none;">div4</div>
</body>
</html>
而第一种方法,需要用一个循环,时间复杂度是O(n).第二种方法虽然比较高效,但不是完全可靠。因为在这一组元素有多个的隐藏属性被意外改变或当前变量被意外改变时,再次触发函数时,并不能将该组元素整理成只显示一个的标准形。
这样还省略了用getElementById的时间.