DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> HTML基礎知識 >> HTML和Xhtml >> IE 下的只讀 innerHTML
IE 下的只讀 innerHTML
編輯:HTML和Xhtml     

網頁制作Poluoluo文章簡介:今天做東西遇到一個問題,我試圖動態為一個表格添加多行數據,先定義了一個table.

今天做東西遇到一個問題,我試圖動態為一個表格添加多行數據,先定義了一個table:

1
2
3
4
5
6
<table>
<thead>
</thead>
<tbody id="filelist">
</tbody>
</table>

然後在JavaScript 中這樣操作:

1
2
3
4
5
for(var i in entries){
  ...
  var filetable = document.getElementById('filelist');
  filetable.innerHTML += '<tr><td>111</td><td>222</td></tr>';
}


在FireFox 下這麼干是沒有問題的,但是放到 IE 下面就死活不行了,問了下同事+搜索了一下,發現在 IE 下 COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR 這些元素的 innerHTML 屬性都是只讀的,不能直接操作。但是也不是沒有解決辦法,TD 的innerHTML 還是可以操作的,上面的代碼可以這樣修改:

1
2
3
4
5
6
7
8
9
10
11
12
for(var i in entries){
  ...
  var filetable = document.getElementById('filelist');
  var tr = document.createElement('tr');
  var td1 = document.createElement('td');
  td1.innerHTML = '111';
  var td2 = document.createElement('td');
  td2.innerHTML = '222';
  tr.appendChild(td1);
  tr.appendChild(td2);
  filetable.appendChild(tr);
}

可以先使用 DOM 的 createElement 方法創建 tr 和 td,然後對 td 的 innerHTML 進行相應操作,最後用 appendChild 方法把創建的元素添加到 DOM 樹中。這樣在 IE 下就可以正常運行了。需要注意的是,如果你的 table 沒有 tbody,而是這樣:

1
<table id="filelist"></table>

這個時候就不能對 table 直接使用 appendChild 方法了,因為IE6 下 table 元素是不支持 appendChild 方法的(IE8 貌似已經支持了)。

網上也有人提出用 insertRow() 等方法來做,不過這個方法對不同浏覽器的兼容也是有問題的(在FireFox 下就需要使用 insertRow(-1) ),所以就沒用。

BTW,雖然之前也有意識地看了不少 JS 的資料,但還是實踐出真知啊,現在剛開始手忙腳亂的,學習淡定ING

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved