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 相关文章推荐
JS获取scrollHeight问题想到的标准问题
May 27 Javascript
javascript实现二分查找法实现代码
Nov 12 Javascript
javascript倒计时效果实现
Nov 12 Javascript
关于javascript作用域的常见面试题分享
Jun 18 Javascript
浅谈Vuex的状态管理(全家桶)
Nov 04 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
Aug 07 Javascript
详解Vue源码中一些util函数
Apr 24 Javascript
小程序登录/注册页面设计的实现代码
May 24 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
Mar 16 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 Javascript
JS实现纸牌发牌动画
Jan 19 Javascript
JavaScript实现点击出现子菜单效果
Feb 08 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 form 表单传参明细研究
2009/07/17 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP使用函数用法详解
2018/09/30 PHP
js对数字的格式化使用说明
2011/01/12 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
解释&amp;&amp;和||在javascript中的另类用法
2014/07/28 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
四年大学自我鉴定
2014/02/17 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
单位婚育证明范本
2014/11/21 职场文书
解析目标检测之IoU
2021/06/26 Python
Python中基础数据类型 set集合知识点总结
2021/08/02 Python