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 相关文章推荐
Javascript 网页黑白效果实现代码(兼容IE/FF等)
Apr 23 Javascript
div层的移动及性能优化
Nov 16 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
Aug 12 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 Javascript
跟我学习javascript的执行上下文
Nov 18 Javascript
js实现简单的碰壁反弹效果
Aug 30 Javascript
vue 2.0封装model组件的方法
Aug 03 Javascript
vue.js实现的绑定class操作示例
Jul 06 Javascript
vue-router中scrollBehavior的巧妙用法
Jul 09 Javascript
vue+springboot实现项目的CORS跨域请求
Sep 05 Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 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下把数组保存为文件格式的实例应用
2010/02/08 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
JavaScript 特殊字符
2007/04/05 Javascript
js实现DIV的一些简单控制
2007/06/04 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
对于Python深浅拷贝的理解
2019/07/29 Python
通过python检测字符串的字母
2020/02/18 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
雷蛇美国官网:Razer
2020/04/03 全球购物
安全承诺书
2015/01/19 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
投标单位介绍信
2015/05/05 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
如何有效防止sql注入的方法
2021/05/25 SQL Server