問題:
開發過程中,用到循環往table里面插入tr標簽,然后tr里又循環插入td,在其它瀏覽器都沒問題,但是在IE9及以下版本中都報錯:

google上得到答案:由於我之前不知道錯誤的原因,在百度找不到解決方法,后來用谷歌搜到了,外國有人也遇到過這個問題,並指出了問題的所在:

演示代碼:
-
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <title>默認標題</title> </head> <body> <table id="mytable" border="1" cellpadding="1" cellspacing="0"> <tr> <td>222</td> </tr> </table> <script type="text/javascript"> var mytable = document.getElementById('mytable'); var tr = mytable.getElementsByTagName('tr')[0]; var td = mytable.getElementsByTagName('td')[0]; //讀取innerHTML(IE任何版本都不報錯,IE6未測) alert(mytable.innerHTML); alert(tr.innerHTML); alert(td.innerHTML); //寫入innerHTML // mytable.innerHTML = '<tr><td>11111</td></tr>'; //IE9及以下報錯 // tr.innerHTML = '<td>11111</td>'; //IE9及以下報錯 // td.innerHTML = '11111'; //所有版本不報錯(IE6未測) //解決方法,使用DOM的原始操作方法或者表格操作方法 // var btnRow = mytable.insertRow(); // var cell = btnRow.insertCell(btnRow.getElementsByTagName('td').length); // cell.innerHTML = "some html text"; </script> </body> </html>
-
得出結論:IE9及以下版本的table以及tr的innerHTML屬性都是只讀的,你可以用它讀取table或者tr中的值,但不能寫入,寫入就報錯,另外在IE9及以下版本中td的innerHTML可讀可寫。
解決方法:使用原始的DOM操作方法或者表格操作方法,見演示代碼。
有朋友回復說可以用jquery解決,是的,可以這個問題確實可以用jquery解決,但是其實jquery內部使用的方法,還是原始的js操作,而且,我當時的情況沒法使用jquery,因為我是網上直接找的一個日歷代碼,它是用原生js寫的,我沒法在里面夾雜着jquery寫。