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 ajax属性async(同步异步)示例
Nov 05 Javascript
javascript贪吃蛇完整版(源码)
Dec 09 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
node.js中的buffer.write方法使用说明
Dec 10 Javascript
遍历js中对象的属性和值的实例
Nov 21 Javascript
Angularjs修改密码的实例代码
May 26 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
Aug 12 Javascript
JQuery样式与属性设置方法分析
Dec 07 jQuery
原生js实现文件上传、下载、封装等实例方法
Jan 05 Javascript
es6函数中的作用域实例分析
Apr 18 Javascript
JavaScript大数相加相乘的实现方法实例
Oct 18 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 正则表达式小结
2009/08/31 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
php实现telnet功能示例
2014/04/08 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
Python实现快速排序的方法详解
2019/10/25 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
python中round函数如何使用
2020/06/19 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
市场安全管理制度
2014/01/26 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
爱国教育主题班会
2015/08/14 职场文书
会计入职心得体会
2016/01/22 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers