使用JavaScript更改表格中所有行的可见性

问题描述:

我有一张由转发器填充的表格,其中许多行最初是隐藏的。我有一个锚点,它会触发一个Javascript函数来更改网格中的所有行。功能如下:使用JavaScript更改表格中所有行的可见性

function ExpandAll() { 
     var elem = document.getElementById("repeaterTable"); 

     var rows = elem.rows; 

     for (var i = 1; i < rows.length; i++) { 
       rows.item(i).style.visibility = 'visible'; 
       rows.item(i).style.display = ''; 
     } 
    } 

这一切工作,但是这个功能在网格大约需要12-13秒,通过〜450行循环。显然我不能花这么长时间。有没有办法更快地做到这一点?隐藏的行目前有:

style.visibility = 'hidden'; 
    style.display = 'none'; 

(所以为什么我要设置显示为“”)

编辑:这是一个有“父”与“子”行一个可折叠的桌子。所有父行总是可见的,并且可以基于图像点击来扩展或折叠子行(每父母大约3-15行)。我还提供了一次展开所有父行的锚点。请参阅下面的图像,这是如何布局:

alt text http://img85.imageshack.us/img85/9586/counties.png

此外,这是由ASP.NET中继器定义填写表格,因此,我没有的“分组”子行的方式一起为每个父行。实质上,表格无论如何都知道子行和父行之间没有区别。

+0

如果您可以找到一种方法来区分父行和子行的标记,那么您将有更多更容易的时间。要么通过嵌套中继器来实现多个'tbody'分组,要么只是用不同的类名来标记它们... – Shog9 2010-01-18 20:53:09

假设只有两个状态“全部可见”和“预先选择的组可见”,那么就忘了关于单独的行。

有一些诸如:

<table class="short" id="repeaterTable"> 

<tr class="longOnly"> 

然后(在你的样式表):

table.short tr.longOnly { display: none; } 

而当你想扩展:

document.getElementById('repeaterTable').className = ''; 
+0

我必须尝试一下。该表不只有两个状态,它是一个可折叠的网格,因此用户可以根据“父”行扩展行中的一些项目,或者可以单击锚点以展开所有行。不过,我可以用它来解决后者。 – Kevin 2010-01-18 20:09:29