【发布时间】:2018-04-06 15:43:29
【问题描述】:
我有一个案例需要即时操作 height 属性。就此而言,我使用以下代码得到了解决方案:
$('table tbody tr td:first-child').each(function(){
var height = $(this).height();
$(this).parent().find('td').height(height);
});
它工作正常,计算准确无误。但是,就性能而言,它非常慢,因为在实际情况下,表最多可以有 100 行。因此,我尝试通过使用原生 js 和其他一些技巧来改善它。代码如下:
var firstColumn = $('#table-wrapper td:first-child');
for (var i = 0; i < firstColumn.length; i++) {
firstColumn[i].parentNode.style.height = firstColumn[i].offsetHeight + "px";
}
结果还不错。它将性能提高了大约两倍。但是,有可能会错过大约 1 px 的计算,不幸的是,这是不能容忍的。
性能计算演示:https://jsfiddle.net/yusrilmaulidanraji/ckfdubsf/132/
在那个Demo中,结果:
- 第一个代码:+- 2.210000000000008 毫秒
- 第二个代码:+- 0.8699999999998909 毫秒(+-2x 更好,但错过计算机会 1px)
因此,我一直在想有没有其他方法可以提高第一个代码的性能?
更新
我刚刚发现了另一个可能有用的信息。
- 在桌面版 Chrome v62.0.3202.62 和移动版 Safari v10.3.3 中,性能还不错。但是,在其他浏览器中,它仍然很慢。
- 我认为主要问题出在
$(this).parent().find('td').height(height);。因为当我禁用那条线时,性能会变得更好。因此,我想如果有改进这条线的解决方案会很好。
【问题讨论】:
-
默认情况下,如果您不通过 css 预先定义任何高度,则表格会生成此高度,它需要更高的高度。我认为这将仅使用 css 解决,无需 js
-
@ÁlvaroTouzón Welp,这就是我使用 js 分配高度的原因:stackoverflow.com/questions/46832756/…
-
我在回复中做了一个演示
-
在您的其他问题中查看我的回答。
-
@Tomalak 好的,让我检查一下。
标签: javascript jquery