【发布时间】:2013-11-17 21:50:39
【问题描述】:
我有几百个这样的“行”元素:
<div class='row'>
<div class='cell'></div>
<div class='cell'></div>
<div class='cell'></div>
</div>
在页面上呈现它们之后,我需要获取它们的 clientHeight。我知道“clientHeight”属性会强制回流,这会影响我的表现,因为它们太多了。但是 - 它们已经被渲染,我知道它们的大小在渲染时间和我查询它们的高度之间没有变化。
有没有办法告诉浏览器在查询高度时不要重排? 此外 - webkit 检查员说:
Layout tree size 5901
Layout scope Whole document
而且 div 位于绝对定位的祖先中 - 不应该只重排绝对定位的元素吗?
编辑:
所以提供的答案是正确的。我实际上弄脏了布局,因为我有这个循环:
rows.each(function(){
$(this).css('height', this.clientHeight);
});
把代码改成这样就解决了问题:
var heights = rows.map(function(){
return this.clientHeight;
});
rows.each(function(){
$(this).css('height', heights.shift());
});
【问题讨论】:
-
一个建议。如果您可以在开始时将您的 div 行设为静态并获取它的 innerHieght,然后将其更改为绝对。或者添加和删除类,您可以计算节点的总高度。
-
为什么用div来模拟表格而不是用表格?
标签: javascript performance dom reflow