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


Posted in Javascript onSeptember 26, 2014

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

Js代码

<!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)

点击下,看看你此时浏览本博客的浏览器是否支持

Click Me

<script type="text/javascript">// <![CDATA[ var isupportTbodyInnerHTML = function () { var table = document.createElement('table') var tbody = document.createElement('tbody') var tr = document.createElement('tr') var td = document.createElement('td') var txt = document.createTextNode('a') td.appendChild(txt) tr.appendChild(td) tbody.appendChild(tr) table.appendChild(tbody) var boo = true try{ tbody.innerHTML = '<tr><td>b</td></tr>' } catch(e) { boo = false } return boo }(); tbodyInnerHTML.onclick = function() { if (isupportTbodyInnerHTML) { alert('你的浏览器支持tbody的innerHTML赋值') } else { alert('你的浏览器是IE6-9内核,不支持tbody的innerHTML赋值') } } // ]]></script>

对于IE6-IE9里如果要设置tbody的innerHTML,可以使用如下替代方法

Js代码

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方法替换

Js代码

function setTBodyInnerHTML(tbody, html) { 
var div = document.createElement('div') 
div.innerHTML = '<table>' + html + '</table>' 
tbody.parentNode.replaceChild(div.firstChild.firstChild, tbody) 
}
Javascript 相关文章推荐
JavaScript 获得选中文本内容的方法
Feb 15 Javascript
jQuery 源码分析笔记(4) Ready函数
Jun 02 Javascript
jquery 检测元素是否存在的实例代码
Nov 19 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
May 12 Javascript
javascript中的this详解
Dec 08 Javascript
javascript实现动态加载CSS
Jan 26 Javascript
js实现网页收藏功能
Dec 17 Javascript
JS随机排序数组实现方法分析
Oct 11 Javascript
webpack下实现动态引入文件方法
Feb 22 Javascript
Three.js实现3D机房效果
Dec 30 Javascript
关于layui导航栏不展示下拉列表的解决方法
Sep 25 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
Dec 27 Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 #Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 #Javascript
jQuery判断当前点击的是第几个li的代码
Sep 26 #Javascript
javascript 自定义回调函数示例代码
Sep 26 #Javascript
jquery和js实现对div的隐藏和显示方法
Sep 26 #Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
Sep 26 #Javascript
jquery实现一个简单好用的弹出框
Sep 26 #Javascript
You might like
php 向访客和爬虫显示不同的内容
2009/11/09 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
canvas绘制多边形
2017/02/24 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
python中的字典详细介绍
2014/09/18 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
Python随机数函数代码实例解析
2020/02/09 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
python中reload重载实例用法
2020/12/15 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
迎新晚会策划方案
2014/06/13 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
离婚协议书样本
2015/01/26 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
音乐之声观后感
2015/06/04 职场文书
会议主持词通用版
2019/04/02 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
MySQL入门命令之函数-单行函数-流程控制函数
2021/04/05 MySQL
python绘制箱型图
2021/04/27 Python
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
Golang并发工具Singleflight
2022/05/06 Golang