4
关注
1956
浏览

使用Javascript设置高度很慢

为什么被折叠? 0 个回复被折叠
做做 未验证用户 用户来自于: 广东省
2020-09-16 16:08
如果您不知道单元的最大高度。你可能应该把你的表格变成div,并使用display flex。 这将允许你有你想要的行为,但会暗示你改变了HTML代码的结构。 而不是有第一个表和第二个的元素,你将不得不交替一个然后另一个。
LeoQ 未验证用户 用户来自于: 广东省
2020-09-15 22:02

不知道关于这个的原因,但:

设置的line-height风格TD应该增加td的高度会增加tr的高度。 如果不是,你可以设置在一个div中封装td的内容,然后在其上设置行高。

另一种方法是加速所有元素的设置。 然后在计算完高度后,设定班级的行高。这将改变所有使用这个类的元素的高度。 阅读关于Javascript的styleSheet对象,了解如何完成此操作....

De芙 未验证用户 用户来自于: 广东省
2020-09-15 18:30

您正在反复阅读,然后写入DOM。这被认为是表现的一大禁忌。正确的做法是先完成所有的“读取”,然后再进行所有的“写入” - 否则就会在中间强制进行回流/计算。你会实际上是有两个回路,一个找到正确的高度,然后第二应用于他们更好:

var rightTableRows = mainTable.children("tbody").children("tr:parent"); 
var leftTableRows = colHeader.children("tbody").children("tr:parent"); 
var length = leftTableRows.length; 
var heights = []; 

for (var chr = 0; chr < length; chr++) { 
    var rowLeft = leftTableRows[chr]; 
    var heightleft = rowLeft.offsetHeight; 
    var rowRight = rightTableRows[chr]; 
    var heightright = rowRight.offsetHeight; 

    if (heightleft > heightright) { 
     heights.push({ 
      elem: rowRight, 
      height: heightleft 
     }); 
    } else { 
     heights.push({ 
      elem: rowLeft, 
      height: heightright 
     }); 
    } 
} 

for (var i = 0; i < heights.length; i++) { 
    heights[i].elem.style.height = heights[i].height + 'px'; 
} 

现在元素及其新的高度得到存储在一个数组对象,那么你只遍历数组。第一次循环后,您再也不会从DOM读取数据。其他优化包括删除不需要的if()语句,缓存HTML节点列表的长度,特别是编写style.height而不是setAttribute()(较慢)。

关于作者

问题动态

发布时间
2020-09-15 15:51
更新时间
2022-09-15 16:04
关注人数
4 人关注

相关问题

个人工作笔记 Powered BY WeCenter V4.1.0 © 2024 粤ICP备2020123311号