performance – 测量表列中最长单元格的有效方法

performance – 测量表列中最长单元格的有效方法,第1张

概述我试图确定固定宽度的 HTML表格单元格中最宽的内容.目前我正在使用外部分级器DIV: <div id="xdivSizer" style="position:absolute;display:inline;visibility:hidden"> </div> 在这段代码中 var iColWidth = 0;for (var Y = 0; Y < oDataTable.rows.lengt 我试图确定固定宽度的 HTML表格单元格中最宽的内容.目前我正在使用外部分级器div:

<div ID="xdivSizer" > </div>

在这段代码中

var iColWIDth = 0;for (var Y = 0; Y < oDatatable.rows.length; Y++) {    odivSizer.INNERHTML = oDatatable.rows[Y].cells[0].INNERHTML;    iColWIDth = Math.max(odivSizer.offsetWIDth,iColWIDth)}

它工作,但极其缓慢,即使表只有100行左右.看起来主要罪犯正在计算offsetWIDth.有没有更有效的方法来实现这一目标?

我这样做是因为我需要将该表列重新调整为最宽数据的大小.如果还有其他更好的方法,那也会很棒.

(更准确地说,我正在尝试在ASP.NET的Infragistics WebHIErarchicalDataGrID控件中实现“列自动调整大小”功能 – 列需要采用最宽的宽度Max(标题宽度,数据宽度),同时保持固定的标题/寻呼机位置).

谢谢!

解决方法 重写div内容将触发大量重绘,CSS应用程序,DOM *** 作等.

尝试将div中列中的所有单元格全部放在一起,用换行符分隔 – 或者每个单元格自己的子div.产生的div的宽度应该是最长的细胞的宽度.

var HTML = [];for (var Y = 0; Y < oDatatable.rows.length; Y++) {    HTML.push(oDatatable.rows[Y].cells[0].INNERHTML);}odivSizer.INNERHTML = HTML.join("<br />");var iColWIDth = Math.max(odivSizer.offsetWIDth,1);

另一种可能性是基于每个单元格的innerText的简单启发式算法.

var iColWIDth = 0;for (var Y = 0; Y < oDatatable.rows.length; Y++) {    var w = Math.floor(oDatatable.rows[Y].cells[0].innerText.length * 11.5);    iColWIDth = Math.max(w,iColWIDth);}

而且,正如我在上一篇评论中指出的那样,另一种可能性是仅重新绘制消耗最大区域的列中的TD.

var a = 0;var n = null;for (var Y = 0; Y < oDatatable.rows.length; Y++) {    var _a = oDatatable.rows[Y].cells[0].offsetHeight * oDatatable.rows[Y].cells[0].offsetWIDth;    if (Number(_a) > a) {      a = _a;      n = oDatatable.rows[Y].cells[0];    }}odivSizer.INNERHTML = n.INNERHTML;var iColWIDth = Math.max(odivSizer.offsetWIDth,1);

或者,更进一步,将每个单元格的计算面积除以找到的BR的数量,以说明“有意”的高单元格.

var a = 0;var n = null;for (var Y = 0; Y < oDatatable.rows.length; Y++) {    var _a = oDatatable.rows[Y].cells[0].offsetHeight * oDatatable.rows[Y].cells[0].offsetWIDth;    var brs = oDatatable.rows[Y].cells[0].getElementsByTagname('br');    _a = Number(_a) / brs.length;    if (_a > a) {      a = _a;      n = oDatatable.rows[Y].cells[0];    }}odivSizer.INNERHTML = n.INNERHTML;var iColWIDth = Math.max(odivSizer.offsetWIDth,1);

但是,随着模糊方法的复杂性增加并且结果变得更加准确,您可以预期性能会下降.

作为旁注,如果由于用户交互而应用此自动调整大小,我建议在表可用于分析之后立即执行调整大小计算/过程,而不是等待用户启动调整.

总结

以上是内存溢出为你收集整理的performance – 测量表列中最长单元格的有效方法全部内容,希望文章能够帮你解决performance – 测量表列中最长单元格的有效方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1059279.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存