<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 – 测量表列中最长单元格的有效方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)