IE6-IE9不支持table.innerHTML的解决方法分享

  测试代码:

  

复制代码 代码如下:

  <table id="test">

  </table>

  <script>

  var oTable=document.getElementById("test");

  oTable.innerHTML="<tr><td>innerHTML</td></tr>";

  </script>

  上述代码在IE6-9中无效,直接报错:

  IE9:Invalid target element for this operation.

  IE6-8:Unknown runtime error

  查找IE的文档(http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx)后发现有这么一段:

  

  The innerHTML property is read-only on the col, colGroup, frameSet, html, head, style, table, tBody, tFoot, tHead, title, and tr objects.

所以只能用其他方案解,我的方案:

  

复制代码 代码如下:

  var oTable=document.getElementById("test");

  //oTable.innerHTML="<tr><td>innerHTML</td></tr>";

  setTableInnerHTML(oTable,"<tr><td>innerHTML</td></tr>");

  function setTableInnerHTML(table, html) {

  if(navigator && navigator.userAgent.match(/msie/i)){

  var temp = table.ownerDocument.createElement('div');

  temp.innerHTML = '<table><tbody>' + html + '</tbody></table>';

  if(table.tBodies.length == 0){

  var tbody=document.createElement("tbody");

  table.appendChild(tbody);

  }

  table.replaceChild(temp.firstChild.firstChild, table.tBodies[0]);

  } else {

  table.innerHTML=html;

  }

  }

  这里只是对table做了处理,对其他不支持的元素可以用类似的方案。

  另外,IE10中table已经支持innerHTML了。

  作者:Artwl