上面的两个答案似乎都有些不清楚。另外,创建的 div 永远不会被删除,因此重复调用这些函数会占用内存。试试这个:
// this function must come before calling it to properly set “temp”
function MSIEsetTBodyInnerHTML(tbody, html) { //fix MS Internet Exploder’s lameness
var temp = MSIEsetTBodyInnerHTML.temp;
temp.innerHTML = '<table><tbody>' + html + '</tbody></table>';
tbody.parentNode.replaceChild(temp.firstChild.firstChild, tbody); }
MSIEsetTBodyInnerHTML.temp = document.createElement('div');
if (navigator && navigator.userAgent.match( /MSIE/i ))
MSIEsetTBodyInnerHTML(tbody, html);
else //by specs, you can not use “innerHTML” until after the page is fully loaded
tbody.innerHTML=html;
尽管如此,即使使用此代码,MSIE 似乎也无法正确调整应用程序中表格单元格的大小,但我正在使用可变生成内容填充空的 tbody 标记,而 thead 单元格的 colspan 值设置为固定值: 生成的 tbody 中可能包含的最大单元格数。虽然表 tbody 有 50 个单元格宽,但只显示了两列。或许如果表格原本是填充的,而单元格被替换为相同的内部结构,这种方法会奏效。Google 的 Chrome 在重建表格方面做得非常出色,而 Opera 的桌面浏览器可以很好地调整到更多列的大小,但是如果删除列,剩余的列宽仍然保持原来的窄;但是对于 Opera,通过隐藏表格 (display=none) 然后重新显示它 (display=table),生成的表格 tbody 单元格然后大小合适。我已经放弃了 Firefox。这是 2012 年的 MSIE-6 - 一个开发的噩梦,必须添加额外的标记才能使 HTML-CSS 布局工作,因为它不符合甚至 MSIE 现在所做的标准。所以我还没有在 Firefox 中测试 tbody.innerHTML 的工作原理。