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 相关文章推荐
彻底搞懂JS无缝滚动代码
Jan 03 Javascript
javascript tips提示框组件实现代码
Nov 19 Javascript
基于JQuery制作可编辑的表格特效
Dec 23 Javascript
jQuery插件StickUp实现网页导航置顶
Apr 12 Javascript
jQuery检测返回值的数据类型
Jul 13 Javascript
javascript数组克隆简单实现方法
Dec 16 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
Sep 21 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
Dec 14 Javascript
微信小程序的动画效果详解
Jan 18 Javascript
Three.js开发实现3D地图的实践过程总结
Nov 20 Javascript
基于Vue的ajax公共方法(详解)
Jan 20 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
May 22 jQuery
简单方法判断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+Html+缓存
2006/12/20 PHP
php中并发读写文件冲突的解决方案
2013/10/25 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
js资料prototype 属性
2007/03/13 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
2018/05/30 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
Python中的descriptor描述器简明使用指南
2016/06/02 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
Python3.5运算符操作实例详解
2019/04/25 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
python实现邮件发送功能
2019/08/10 Python
什么是Python变量作用域
2020/06/03 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
Born鞋子官网:Born Shoes
2017/04/06 全球购物
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
英国网上超市:Ocado
2020/03/05 全球购物
深圳-东方伟业笔试部分
2015/02/11 面试题
函授毕业个人自我评价
2014/02/20 职场文书
作风建设剖析材料
2014/10/06 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
广告文案的撰写技巧(实用干货)
2019/08/23 职场文书
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技