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 相关文章推荐
List the Codec Files on a Computer
Jun 18 Javascript
jquery获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
解析URI与URL之间的区别与联系
Nov 22 Javascript
JavaScript电子时钟倒计时
Jan 09 Javascript
Angular中$compile源码分析
Jan 28 Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 Javascript
详解Angular如何正确的操作DOM
Jul 06 Javascript
vue实现可视化可拖放的自定义表单的示例代码
Mar 20 Javascript
vue-cli3 取消eslint校验代码的解决办法
Jan 16 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
Jun 08 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
Oct 29 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
Oct 30 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中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
javascript 特殊字符串
2009/02/25 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
基于jQuery实现搜索关键字自动匹配功能
2020/03/26 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
Python3实现定时任务的四种方式
2019/06/03 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
详解用python生成随机数的几种方法
2019/08/04 Python
Python算法中的时间复杂度问题
2019/11/19 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
求职简历的自我评价怎样写好
2013/10/07 职场文书
特教教师先进事迹
2014/05/21 职场文书
个人道歉信大全
2019/04/11 职场文书