今天做東西遇到一個問題,我試圖動態為一個表格添加多行數據,先定義了一個table:
123456 | <table><thead></thead><tbody id=filelist></tbody></table> |
然後在javascript 中這樣操作:
12345 | 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 還是可以操作的,上面的代碼可以這樣修改:
123456789101112 | 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