【发布时间】:2015-09-23 10:09:13
【问题描述】:
我有一个具有调整大小功能的表格。实际上,它不是<table> 元素。我使用<div> 元素的集群。
简而言之,我的调整大小函数是一个嵌套的“for”循环。是这样的:
function resizeTable (computedCellWidth) {
for (var r = 0; r < rows.length; r++) {
for (var c = 0; c < rows[r].cells.length; c++) {
rows[r].cells[c].domNode.style.width = computedCellWidth + 'px';
}
}
}
据我了解,每个rows[r].cells[c].domNode.style.width = computedCellWidth + 'px'; 都会导致整个文档重绘。因此,如果表足够大,那么调整表大小会极大地降低浏览器的速度。
我尝试使用限制(100 毫秒)来减少调整大小事件的数量,但如果表足够大,那么即使是单次调整大小也会花费太多时间。
我可以先分配所有width 属性,然后再启动单个重绘吗?
【问题讨论】:
-
在调整大小之前将表格设置为
display:none,然后再设置为inline或block(以相关为准)。 -
@Archer,很好的建议,但是隐藏表格等待进程结束会使表格消失并出现,不是吗?
-
您是否显示表格数据(即电子表格)?如果是这样,您是否尝试过使用实际的
标签?在这种情况下使用“真实”表是完全可以的。由于给定列的表格单元格宽度都是相同的(colspan 不能承受),我假设浏览器只需要获取然后计算每列的第一个单元格的宽度,然后 only将此值应用于同一列的所有其他单元格。从而减少了计算量和 DOM 读取访问量(浏览器必须获取所有 div 的值,计算 ALL 然后应用值)。
@Archer,谢谢!这提高了我的桌子,但只是一段时间。对于大量数据,它仍然运行缓慢。但现在这个数额比以前大得多。@redrum,<table>不适合我。我的表使用 colspans 和单独的列大小调整,这在<table>中工作不正确。这就是为什么我决定使用<div>的集群。
标签: javascript html