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实战_读书笔记1—选择jQuery
Jan 22 Javascript
Cookie 小记
Apr 01 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
jQuery中innerHeight()方法用法实例
Jan 19 Javascript
详解JavaScript中localStorage使用要点
Jan 13 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 Javascript
手机Web APP如何实现分享多平台功能
Aug 19 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
Aug 10 Javascript
微信小程序使用字体图标的方法
May 23 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
Jul 22 Javascript
vue elementui tree 任意级别拖拽功能代码
Aug 31 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
德生S2000电路分析
2021/03/02 无线电
php二维数组用键名分组相加实例函数
2013/11/06 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
解javascript 混淆加密收藏
2009/01/16 Javascript
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
Python群发邮件实例代码
2014/01/03 Python
Python、Javascript中的闭包比较
2015/02/04 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
python re模块的高级用法详解
2018/06/06 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
Django 自动生成api接口文档教程
2019/11/19 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
普师专业个人自荐信范文
2013/11/26 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
家长给老师的道歉信
2014/01/13 职场文书
交通事故和解协议书
2015/01/27 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书