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实现的仿Flash广告图片轮换效果
Apr 24 Javascript
jQuery对象[0]是什么含义?
Jul 31 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
Oct 06 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
May 07 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
Oct 22 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
Aug 11 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
vue使用laydate时间插件的方法
Nov 14 Javascript
javascript头像上传代码实例
Sep 28 Javascript
对vuex中store和$store的区别说明
Jul 24 Javascript
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
简单方法判断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向浏览器输出内容的4个函数总结
2014/11/17 PHP
thinkPHP实现表单自动验证
2014/12/24 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
Python双向循环链表实现方法分析
2018/07/30 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
用python对excel查重
2020/12/07 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
美国排名第一的葡萄酒俱乐部:Firstleaf Wine Club
2020/01/02 全球购物
法制宣传实施方案
2014/03/13 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
购房委托书
2014/10/15 职场文书
教师工作总结范文2014
2014/11/10 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
年度考核个人总结
2015/03/06 职场文书
《窃读记》教学反思
2016/02/18 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis