【发布时间】:2015-04-11 18:49:21
【问题描述】:
我有很多行的html页面(大约40000)
<html><body>
<table id="t1">
<tr id="r1" name="1"><td>row 1</td></tr>
<tr id="r2" name="1"><td>row 2</td></tr>
....
<tr id="r50000" name="3"><td>row 30000</td></tr>
</table></body></html>
我需要一种快速的方法来隐藏/显示具有指定名称的行集(10 000 或 20 000)。平台要求:IE8-9 和 Mozilla Firefox。我盘点了很多方法:使用 tbody、块标签、隐藏行和停在一个:循环遍历行并隐藏/显示它:
curLevel=root.getAttribute("Name");
var nextElement=curElement.nextElementSibling;
while(nextElement!=null)
{
curElement=nextElement;
nextElement=curElement.nextElementSibling;
if(curElement.tagName=="TR")
{
i++;
childLevel=curElement.getAttribute("Name");
if(childLevel<=curLevel)
break;
curElement.style.display = blockStyle;
}
}
但是这个方法很慢!!大约需要2分钟...
循环速度很快,最慢的部分是curElement.style.display = blockStyle;,它每次都会重新绘制文档。
我可以更改选择行的显示样式,然后显示更改吗?
附:没有 jQuery
【问题讨论】:
-
尝试搜索数据表。它是一个 API,可以管理数千甚至数百万条记录,并在服务器端工作,然后在浏览器中加载,如果您想在 3 秒内加载更有效
-
看看这个问题的建议:stackoverflow.com/questions/1392068/…
-
@dfsq,它有好主意。 1.克隆表,而不是修改它并替换子表...
-
@bcesars ,谢谢,但是 DataTables 是 jQuery 库,不是吗?
-
我只是将我的数据存储在一个对象数组中。然后使用
document.createDocumentFragment(),根据具有偏移量的对象数组向其附加大约 50 个左右的,并用它替换 tbody。 DOM 让您放慢了速度,因此解决方案是将其存储在一个数组中,直到您真正需要查看记录为止。地狱在那一点上,你可以在下一个/上一个 50 中使用 ajax,如果它还没有被缓存的话。
标签: javascript html html-table hide show