MSIE8互換モードでは、動的に作成されたテーブルをレンダリングしません

StackOverflow https://stackoverflow.com/questions/2406706

質問

ビット奇妙な... ... IE8のQuirksモードまたは互換表示モードで実行している場合は、次のコードによって追加されたテーブルは、レンダリングされません。それは私には明らかにされていませんので、誰もが、なぜ私に言うことができる..?

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>
function AddTable()
{
  var table = document.createElement('table');
  var row = document.createElement('tr');
  table.appendChild(row);
  var cell = document.createElement('td');
  cell.innerHTML='abc';
  row.appendChild(cell);
  var divContainer = document.getElementById('divContainer');
  divContainer.appendChild(table);
}
</script>
</head>
<body>
<div id='divContainer'>
</div>
<input type='button' value='add table' onclick='javascript:AddTable()' />
</body>
</html>
役に立ちましたか?

解決

Microsoftは何が起こっている照明することができるページがあります。

http://msdn.microsoft.com /en-us/library/ms532998(VS.85).aspx#TOM_Createする

動的彼らはあなたがDOMのmethodsinsertRow()insertCell()でやっている仕事をするためにcreateElement()appendChild()のようなメソッドを使用しています「表オブジェクトモデル」を、提唱テーブルを構築するため。あなたがDOMメソッドを使用する場合にもOKですが、の「Internet ExplorerがTBODY要素を作成し、DOMを使用した場合、テーブルに挿入する必要があります。あなたが直接ドキュメントツリーを操作しているので、Internet Explorerが作成されません。 HTMLを使用したときに自動的に暗示されてTBODY、。 "

テーブルオブジェクトモデルは、それを理解するためには悪い考えではないかもしれないので、私は、(MacのChromeとFirefoxの)でそれをテストしたブラウザのカップルで動作します。あなたがDOMメソッドに固執したい場合はIEがそれを必要とするためか、tBody要素を追加します。

あなたは、2つの比較方法を見ていき、あなたのAddTable()メソッドの最後に次のコードを追加する場合は、

(主に、2番目の表は、その中にtBodyを持つことになります)。そして、それはIE8でレンダリングされます。

 // now the Table Object Model way
  table = document.createElement('table');
  row = table.insertRow(-1) ;
  cell = row.insertCell(-1) ;
  cell.innerHTML='def';
  divContainer.appendChild(table);

この情報がお役に立てば幸いです。

他のヒント

タグのTBODY要素を追加してみてください

の代わりに

  var row = document.createElement('tr');
  table.appendChild(row);

DO

  var tbody = document.createElement('tbody');
  var row = document.createElement('tr');
  tbody.appendChild(row);
  table.appendChild(tbody);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top