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

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

Js代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

<!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不支持,而且报错,如图

可以利用特性判断来看浏览器是否支持tbody的innerHTML设值

1
2
3
4
5
6
7
8
9
10
11
12
13

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

1

<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代码

1
2
3
4
5
6
7
8

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代码

1
2
3
4
5

function setTBodyInnerHTML(tbody, html) { 
var div = document.createElement('div') 
div.innerHTML = '<table>' + html + '</table>' 
tbody.parentNode.replaceChild(div.firstChild.firstChild, tbody) 
}

时间: 2024-08-04 00:42:51

IE6-IE9中tbody的innerHTML不能赋值的解决方法的相关文章

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

IE6-IE9中tbody的innerHTML不能赋值,重现代码如下 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>IE6-IE9中tbody的innerHTML不能复制bug</title> </head> <body style="height:3000px"> <

IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解决方案_经验交流

IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值,重现代码如下 复制代码 代码如下: <!DOCTYPE html><html>    <head>        <meta charset="utf-8"/>        <title>IE6-IE9中tbody的innerHTML不能复制bug</title>    </head>    <body style=&quo

window.location.href中url中数据量太大时的解决方法

 这篇文章主要为大家介绍下window.location.href中url中数据量太大时的解决方法,需要的朋友可以参考下 先说一下今天遇到的问题   一个导出excel的处理,在按钮按下后需要传很大一个数据到后台,刚开始的做法如下: 代码如下: var actionUrlSetData = "****Action!exportDatas.action"+ "?now=" + new Date().getTime(); window.location.href= ac

wps文字中的字体无法继续放大的解决方法

  有时为了打印和设计的方便,我们需要将wps文字中的字体进行放大多倍,但wps文字默认最大只有七十二磅,之后就不能放大了,那么如果你需要更大的字体,该怎么进一步对字体进行放大呢?下面小编就为大家介绍wps文字中的字体无法继续放大的解决方法介绍,希望能对大家有所帮助! 方法/步骤 1.打开你的wps软件,选中你要放大的字体.然后打开开始菜单,在字体后面找到"增大字号"功能. 2.然后,反复的点击"增大字号",几次之后,选中的汉字字体就会变得很大,直到满足你的要求.

win7系统中常见的一些小问题和解决方法

在使用电脑中难免会遇到一些小问题,而小问题如果你知道解决方法的话,那么基本上几分钟就能解决了,而如果你不知道可以要想很久或者百度很久才能找到解决方法. 1 截图花屏 这个问题主要是由于显卡驱动程序和你的显卡不是很配的情况下才会发生,我们只需要重新换个显卡驱动基本上就没问题了. 2 盘符错乱 盘符错乱从Win95时代便经常发生,这一次Windows 7更严重了.如果你是从光盘安装的Windows 7,那系统就会把它所在分区设为C区,然后再根据管理来排列其他分区.要解决Windows 7的盘符错乱可

win7系统中excel导入外部数据出错的解决方法

  在我们平常办公中,最常用的软件是什么?当然是office软件中的word文档.Execl表格和PPT了,在需要用到文字的时候我们选择word,在做数字统计时用execl,演示图片时使用PPT,这三种办公软件是我们常见的.但是最近有win7的用户来反映说,在用excel导入外部数据时老是出错,无法导入成功,这样不仅损坏外部数据,而且也影响我们的办公效率.下面小编来教大家一招,如何在win7系统电脑中导入外部的数据.   win7系统中excel导入外部数据出错的解决方法如下: 1.首先,咱们需

PHP中file_exists()判断中文文件名无效的解决方法_php技巧

本文实例讲述了PHP中file_exists()判断中文文件名无效的解决方法.分享给大家供大家参考.具体方法如下: php中判断文件是否存在我们会使用file_exists函数或is_file函数,但在使用file_exists时如果你文件名或路径是中文在uft8编码文档时是无效.本文就来解决此问题,下面我们一起来看看. 定义和用法:file_exists() 函数检查文件或目录是否存在. 如果指定的文件或目录存在则返回 true,否则返回 false. 例子1 复制代码 代码如下: <?php

flash as3 中动态加载库类失败解决方法

flash as3 中动态加载库类失败解决方法 这是错误的写法 for (var i:number=1; i<4; i++) { var mc1:mc1 = new mc1(); addchild(mc1); } as3里怎么循环加载库里的mc1 mc2 mc3类 就是下面意思是怎样个的写法 for (var i:number=1; i<4; i++) { var "mc"+i:"mc"+i = new "mc"+i(); addch

eclipse-python已安装了一个包,但是导入包中的模块时报错,求解决方法

问题描述 python已安装了一个包,但是导入包中的模块时报错,求解决方法 我用的是eclipse with pydev,用pip安装了impacket,编译一些impacket的例子时报错,如下图: 但是我是安装了的,在anaconda的lib的sit-packges的impacket下,是有模块ImpackPacket的,如下图: 在ecplipse中能查看模块ImpackPacket的源码的: 就是编译时报错,求解决方法 解决方案 你的编辑器环境是否能找到自己安装的包的路径.是否配置好