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 相关文章推荐
表单提交前触发函数返回true表单才会提交
Mar 11 Javascript
Javascript实现简单二级下拉菜单实例
Jun 15 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
Jul 31 Javascript
jQuery UI库中dialog对话框功能使用全解析
Apr 23 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
JavaScript解析任意形式的json树型结构展示
Jul 23 Javascript
详解A标签中href=&quot;&quot;的几种用法
Aug 20 Javascript
JavaScript实现异步图像上传功能
Jul 12 Javascript
了解JavaScript中的选择器
May 24 Javascript
vue配置文件实现代理v2版本的方法
Jun 21 Javascript
vue中keep-alive、activated的探讨和使用详解
Jul 26 Javascript
JS实现百度搜索框
Feb 25 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扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
PHP常用技巧汇总
2016/03/04 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
javascript中创建对象的几种方法总结
2013/11/01 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
Python实现的tab文件操作类分享
2014/11/20 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python代码编写计算器小程序
2020/03/30 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
2014年元旦感言
2014/03/06 职场文书
外联部演讲稿
2014/05/24 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
采购部年度工作总结
2015/08/13 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript