IE 下的只读 innerHTML


Posted in Javascript onAugust 21, 2009

今天做东西遇到一个问题,我试图动态为一个表格添加多行数据,先定义了一个table:

<table> 
<thead> 
</thead> 
<tbody id="filelist"> 
</tbody> 
</table>

然后在JavaScript 中这样操作:
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 还是可以操作的,上面的代码可以这样修改:
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,而是这样:
<table id="filelist"></table>
这个时候就不能对 table 直接使用 appendChild 方法了,因为IE6 下 table 元素是不支持 appendChild 方法的(IE8 貌似已经支持了)。
网上也有人提出用 insertRow() 等方法来做,不过这个方法对不同浏览器的兼容也是有问题的(在FireFox 下就需要使用 insertRow(-1) ),所以就没用。
BTW,虽然之前也有意识地看了不少 JS 的资料,但还是实践出真知啊,现在刚开始手忙脚乱的,学习淡定ING
Javascript 相关文章推荐
Web版彷 Visual Studio 2003 颜色选择器
Jan 09 Javascript
jQuery创建自己的插件(自定义插件)的方法
Jun 10 Javascript
javascript处理表单示例(javascript提交表单)
Apr 28 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
Aug 05 Javascript
jQuery Validate初步体验(二)
Dec 12 Javascript
JavaScript编程学习技巧汇总
Feb 21 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
Jun 15 Javascript
利用CDN加速react webpack打包后的文件详解
Feb 22 Javascript
echarts设置图例颜色和地图底色的方法实例
Aug 01 Javascript
JavaScript 替换所有匹配内容及正则替换方法
Feb 12 Javascript
深入详解JS函数的柯里化
Jun 09 Javascript
JS 控制CSS样式表
Aug 20 #Javascript
JS获取父节点方法
Aug 20 #Javascript
javascript 数组排序函数
Aug 20 #Javascript
用Javascript数组处理多个字符串的连接问题
Aug 20 #Javascript
JQUERY 浏览器判断实现函数
Aug 20 #Javascript
google地图的路线实现代码
Aug 20 #Javascript
JavaScript 字符串乘法
Aug 20 #Javascript
You might like
在线竞拍系统的PHP实现框架(一)
2006/10/09 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
node.js中cluster的使用教程
2017/06/09 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
python中去空格函数的用法
2014/08/21 Python
Python中的异常处理简明介绍
2015/04/13 Python
Python脚本在Appium库上对移动应用实现自动化测试
2015/04/17 Python
Python中的TCP socket写法示例
2018/05/11 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
python动态视频下载器的实现方法
2019/09/16 Python
python实现超市商品销售管理系统
2019/10/25 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
Java面向对象面试题
2016/12/26 面试题
夜大自我鉴定
2013/10/31 职场文书
政府法律服务方案
2014/06/14 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
授权委托书怎么写
2014/09/25 职场文书
个人工作决心书
2015/09/22 职场文书
V Rising 服务器搭建图文教程
2022/06/16 Servers