【发布时间】:2014-11-19 07:03:31
【问题描述】:
我在使用 JavaScript 操作 HTML 表格时遇到了缩放问题。
我有一个 JavaScript 代码块,可以从 JSON 数组动态创建一个表。 它修复了表头并允许表体滚动,效果很好。
表头是一个单独的表格,我强烈控制单元格宽度以确保表头表的单元格与正文表单元格匹配。
正文表格单元格都明确设置了宽度。
我迭代表格中的行,然后在该循环中迭代单元格,并设置每个单元格的宽度。
此迭代没有缩放,随着行数增加到 100,列数增加到 40,我收到 Firefox 的投诉,即脚本挂起或无响应。它没有响应,因为它正忙于设置所有单元格宽度。
nz.dynatable.setTableColumnWidths = function (table, arrayColumnWidths) {
// Iterate the table and set width settings for each cell
for (var i = 0; i < table.rows.length; ++i) {
for (var j = 0; j < table.rows[i].cells.length; ++j) {
var width = arrayColumnWidths[j] || 0;
table.rows[i].cells[j].style.width = width.toString() + "px";
}
}
}
问:是否可以在一行中设置表格的单元格宽度,并使表格中的所有其他单元格都与此一致? Firefox 是否因为更改单元格宽度导致它在每个循环中重新计算表格大小而受到重创?
完整代码块位于公共 GitHub 存储库中:https://github.com/Hiblet/DynaTable
【问题讨论】:
-
你试过只做第一行吗?这是正常的表行为。
-
是的,这是老派的把戏,只需在第一行设置宽度 - 并祈祷不涉及 colspans :P 有人再使用 colgroup 了吗?
-
没有 colspans,这一切都在我的控制之下。将试一试第一排,如果可行,它将大大加快该部分的速度。明天试试,谢谢回复。
-
抱歉耽搁了。第一排就够了,太好了。 @isherwood 会提供一个象征性的答案,以便我可以将其标记为这样吗?非常感谢你们俩的帮助。
-
注意:当我对行进行排序并重新排序时,最上面的行不再是表格中的第一个,格式被填满了;我必须存储列宽并在排序后重置第一行。 GitHub 已更新。一切都好!
标签: javascript html-table