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 相关文章推荐
htm调用JS代码
Mar 15 Javascript
javascript开发技术大全-第3章 js数据类型
Jul 03 Javascript
extjs两个tbar问题探讨
Aug 08 Javascript
JQuery对id中含有特殊字符的转义处理示例
Sep 06 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
Oct 26 Javascript
js导出excel文件的简洁方法(推荐)
Nov 02 Javascript
简单谈谈ES6的六个小特性
Nov 18 Javascript
Vue.js样式动态绑定实现小结
Jan 24 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
Feb 12 Javascript
js实现自动播放匀速轮播图
Feb 06 Javascript
Vue组件模板及组件互相引用代码实例
Mar 11 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漏洞小结
2012/02/05 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
require.js的用法详解
2015/10/20 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
简单谈谈json跨域
2016/03/13 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
详解vuex的简单使用
2018/03/12 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
微信小程序实现图片上传功能
2018/05/28 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python数组定义方法
2016/04/13 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
护理学中专毕业生求职信
2013/11/11 职场文书
实习鉴定评语
2014/01/19 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
四年大学自我鉴定
2014/02/17 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
《春酒》教学反思
2016/02/22 职场文书
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang