您可能会考虑为此编写普通的 javascript。可能会节省几毫秒的时间。
var cells = myTable.rows[0].children;
for ( var i = 0; i < cells.length; i++ ){
cells[i].style.width = cells[i].offsetWidth + "px";
}
因为您使用的是 offsetWidth,所以您将无法摆脱 reflow。但是,根据 TH 中的字符数估计单元格宽度(假设文本不换行并且您使用的是固定的、单一字体的字体)并创造性地应用 CSS 可以大大减少回流延迟。
// Appends CSS Classes to stylesheet in doc head
function appendStyle(styles) {
var css = document.createElement('style');
css.type = 'text/css';
// Browser compatibility check
if (css.styleSheet) css.styleSheet.cssText = styles;
else css.appendChild(document.createTextNode(styles));
document.getElementsByTagName("head")[0].appendChild(css);
}
var cells = myTable.rows[0].children;
var cellWidth = 0;
var letterWidth = 5; // let's assume each letter is 5px wide
var classname = '';
var styles = '';
for ( var i = 0; i < cells.length; i++ ){
classname = "Cell" + i;
cell[i].className = classname;
cellWidth = (letterWidth * cells[i].innerHTML.length);
styles += "." + classname + "{width:" + cellWidth + "px}";
}
window.onload = function() { appendStyle(styles) };
您可以通过使用文档片段( John Resig 关于性能优势的精彩文章)来更进一步,方法是在运行时在 DOM 之外渲染整个内容并在 DOM 加载后交换片段……但说真的,在这一点上你真的要问问自己果汁是否值得挤压。