Оба ответа выше кажутся немного неясными. Кроме того, созданный 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 сгенерированным переменным содержимым, в то время как значения colspan ячеек thead установлены на фиксированное значение: максимальное количество ячеек, которые могут быть в сгенерированном теле. В то время как ширина таблицы составляет 50 ячеек, отображаются только два столбца. Возможно, если таблица была изначально заполнена, а ячейки были заменены на ту же внутреннюю структуру, этот метод сработал бы. Google Chrome отлично справляется с перестройкой таблицы, в то время как браузер Opera для настольных компьютеров может просто изменить размер на большее количество столбцов, но если вы удалите столбцы, оставшаяся ширина столбцов останется такой же узкой, как и раньше; однако в Opera, скрывая таблицу (display = none), затем повторно ее отображая (display = table), сгенерированные ячейки tbody таблицы затем масштабируются должным образом. Я отказался от Firefox. Это MSIE-6 2012 года - кошмар для разработки, для которого необходимо добавить дополнительную разметку, просто чтобы заставить работать HTML-CSS макеты, потому что она не соответствует стандартам, которые сейчас делает даже MSIE. Поэтому я не проверял работу tbody.innerHTML в Firefox.