【发布时间】:2012-07-11 17:00:08
【问题描述】:
我有一个有 100 列的表。我正在循环遍历所有 th 元素,以明确设置每个 th 的宽度。
var $ths = $("table th");
$ths.each(function (i, th) {
var $th = $(th);
var width = $th.width();
$th.width(width);
});
对于 100 列,这需要太多时间(超过 60 秒)。每个“获取宽度”调用需要 500-700 毫秒。这是因为它每次都需要生成布局,我得到了宽度。
问题 - 有没有更快的方法来获得宽度?
原因 - 我正在冻结标题。为此,我需要将每个标题的宽度设置为固定像素宽度。一切都是动态的,不能以 px 为单位预先设置每列的宽度。
【问题讨论】:
-
为什么你不能用 CSS 做这个?
-
您可以通过使用标准的
for循环并通过设置$th.width($th.width());取消width变量来获得微小的改进。关于将标题行复制到另一个visibility:hidden表并从该表中获取宽度,我有一种半生不熟的想法——也许这会更快,因为您将从单行表中获取宽度。我很惊讶 getting 宽度比 setting 宽度要长得多。 -
您能解释一下“冻结标头”是什么意思吗?这是否意味着给定列中的任何内容都不能超过其标题的宽度?
-
@Blender 你会如何使用 CSS 来做到这一点?
-
我对你的代码中的鼻涕进行了负载测试,它的运行速度与你使用 jQuery 运行的速度一样快。
标签: javascript jquery performance width