IE6-IE9中tbody的innerHTML不能赋值的解决方法


Posted in Javascript onJune 05, 2014

IE6-IE9中tbody的innerHTML不能赋值,重现代码如下

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"/> 
<title>IE6-IE9中tbody的innerHTML不能复制bug</title> 
</head> 
<body style="height:3000px"> 
<table> 
<tbody> 
<tr><td>aaa</td></tr> 
</tbody> 
</table> 
<p> 
<button id="btn1">GET</button><button id="btn2">SET</button> 
</p> 
<script> 
var tbody = document.getElementsByTagName('tbody')[0] 
function setTbody() { 
tbody.innerHTML = '<tr><td>bbb</td></tr>' 
} 
function getTbody() { 
alert(tbody.innerHTML) 
} 
btn1.onclick = function() { 
getTbody() 
} 
btn2.onclick = function() { 
setTbody() 
} 
</script> 
</body> 
</html>

两个按钮,第一个获取tbody的innerHTML,第二个设置tbody的innerHTML。

获取时所有浏览器都弹出了tr的字符串,但设置时IE6-9不支持,而且报错,如图
IE6-IE9中tbody的innerHTML不能赋值的解决方法 
可以利用特性判断来看浏览器是否支持tbody的innerHTML设值

var isupportTbodyInnerHTML = function () { 
var table = document.createElement('table') 
var tbody = document.createElement('tbody') 
table.appendChild(tbody) 
var boo = true 
try{ 
tbody.innerHTML = '<tr></tr>' 
} catch(e) { 
boo = false 
} 
return boo 
}() 
alert(isupportTbodyInnerHTML)

对于IE6-IE9里如果要设置tbody的innerHTML,可以使用如下替代方法
function setTBodyInnerHTML(tbody, html) { 
var div = document.createElement('div') 
div.innerHTML = '<table>' + html + '</table>' 
while(tbody.firstChild) { 
tbody.removeChild(tbody.firstChild) 
} 
tbody.appendChild(div.firstChild.firstChild) 
}

用一个div来包含一个table,然后删除tbody里的所有元素,最后给tbody添加div的第一个元素的第一个元素,即div>table>tr。

当然还有一个更精简的版本,它直接采用replaceChild方法替换

function setTBodyInnerHTML(tbody, html) { 
var div = document.createElement('div') 
div.innerHTML = '<table>' + html + '</table>' 
tbody.parentNode.replaceChild(div.firstChild.firstChild, tbody) 
}

从MSDN上记录上看 col、colGroup、frameset、html、head、style、table、tfoot、tHead、title和tr的innerHTML都是只读的(IE6-IE9)。

The innerHTML property is read-only on the col, colGroup, frameSet, html, head, style, table, tBody, tFoot, tHead, title, and tr objects.

You can change the value of the title element using the document.title property.

To change the contents of the table, tFoot, tHead, and tr elements, use the table object model described in Building Tables Dynamically. However, to change the content of a particular cell, you can use innerHTML.

Javascript 相关文章推荐
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
May 28 Javascript
jQuery实现简单的间隔向上滚动效果
Mar 09 Javascript
JavaScript实现自动变换表格边框颜色
May 08 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
Jul 05 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
Jan 13 Javascript
Bootstrap显示与隐藏简单实现代码
Mar 06 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
Jun 12 Javascript
微信小程序progress组件使用详解
Jan 31 Javascript
p5.js入门教程之小球动画示例代码
Mar 15 Javascript
从零开始搭建webpack+react开发环境的详细步骤
May 18 Javascript
vue中实现Monaco Editor自定义提示功能
Jul 05 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
Nov 16 Javascript
首页图片漂浮效果示例代码
Jun 05 #Javascript
原生js实现fadein 和 fadeout淡入淡出效果
Jun 05 #Javascript
javascript的事件触发器介绍的实现
Jun 05 #Javascript
javascript中attribute和property的区别详解
Jun 05 #Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
Jun 05 #Javascript
用js的document.write输出的广告无阻塞加载的方法
Jun 05 #Javascript
javascript数组去重方法终极总结
Jun 05 #Javascript
You might like
PHP $_SERVER详解
2009/01/16 PHP
php SQL之where语句生成器
2009/03/24 PHP
奇怪的PHP引用效率问题分析
2012/03/23 PHP
探讨:如何编写PHP扩展
2013/06/13 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
python代码制作configure文件示例
2014/07/28 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
详解django.contirb.auth-认证
2018/07/16 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
python 读取修改pcap包的例子
2019/07/23 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
PyTorch的torch.cat用法
2020/06/28 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
优秀员工表扬信
2014/01/17 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
小学学校评估方案
2014/06/08 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
酒桌上的开场白
2015/06/01 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
MySQL8.0的WITH查询详情
2021/08/30 MySQL
Win11更新失败并提示0xc1900101
2022/04/19 数码科技