给DIV的innerHTML赋值后很奇怪的问题

xianglf 2011-11-17 08:45:38
取出某个元素的innerHTML,赋给一个动态创建的div元素。但是发现div在解析的时候会把前面几个字符删除掉,导致在页面上显示不正常,有人碰到过这种情况吗?
比如:

var divtemp = document.createElement("div");
divtemp.innerHTML = getInnerHTML("xx");

这时divtemp在页面显示是不正常的,打印出getInnerHTML()函数的返回值是正常的。
比如当getInnerHTML函数返回<tr><td>xxxxxxxxxxxxxxxxxxxxxxx</td>/tr>这样的值的时候,divtemp会把前面的<tr><td>去掉,直接从xxxxx开始。请问这怎么解决?
...全文
578 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
xianglf 2011-11-18
  • 打赏
  • 举报
回复
结贴了,分不多,非常谢谢各位
xianglf 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 axiheyhey 的回复:]

发现在JS版块好多人提问都说不清楚问题的。。LZ你是想在div里面放tr?如果是这样的话,别白费力气了,tr不能脱离table独立存在,和innerHTML没有任何关系。你试试这个页面就知道了HTML code
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UT……
[/Quote]
好吧,是我没清楚,其实我的本意不是要把TR放到DIV里面去,这只是举例说明。
不过,把TR动态放到DIV中还真可以。
一起混吧 2011-11-17
  • 打赏
  • 举报
回复
var message = getInnerHTML("xx");
divtemp.appendChild(document.createTextNode(message));

这样试试。
峭沙 2011-11-17
  • 打赏
  • 举报
回复
你这种需求不能用innerHTML,要用innerText(IE支持)或textContent(标准浏览器支持)
默默不得鱼 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xianglf 的回复:]
取到的值就是这样的,table的innerHTML又是只读的,各位有什么高招没
[/Quote]table的innerHTML是只读的?
xianglf 2011-11-17
  • 打赏
  • 举报
回复
不要叫我解析取到的字符串,要疯掉的
xianglf 2011-11-17
  • 打赏
  • 举报
回复
取到的值就是这样的,table的innerHTML又是只读的,各位有什么高招没
铀钚氕氘氚 2011-11-17
  • 打赏
  • 举报
回复
div里怎么可以有tr,td标签啊....
Legend1988 2011-11-17
  • 打赏
  • 举报
回复
会不会是因为你创建的是div,无法添加tr、td,所以自动把它省掉了~
liangws 2011-11-17
  • 打赏
  • 举报
回复
"<tr><td>"是在table里面的 ,你将他inner给div,肯定是不行的啊。。请根据规范的html来做
峭沙 2011-11-17
  • 打赏
  • 举报
回复
发现在JS版块好多人提问都说不清楚问题的。。LZ你是想在div里面放tr?如果是这样的话,别白费力气了,tr不能脱离table独立存在,和innerHTML没有任何关系。你试试这个页面就知道了
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>add Emp</title>
</head>
<body>
<div id="div">
<tr>
<td>Test Div</td>
</tr>
</div>
</body>
</html>
xianglf 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 crazyleo814 的回复:]

首先你要了解一下innerHTML和innerText的区别,再去用
innertHTML本来就是要自动滤掉html标签的
[/Quote]
不知道我有没有理解错,好像innerHTML并不过滤全部的HTML标签,只是当innerHTML里面的值形成类似<TR><TD></TD></TR>这样的关系时,才会过滤。
crazyleo814 2011-11-17
  • 打赏
  • 举报
回复
首先你要了解一下innerHTML和innerText的区别,再去用
innertHTML本来就是要自动滤掉html标签的
xianglf 2011-11-17
  • 打赏
  • 举报
回复
在<TR>前加空格,问题解决了,只是这种解决方案感觉不优雅呀,各位大大有什么更好的解决方法吗?
xianglf 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 xianglf 的回复:]

引用 18 楼 p2227 的回复:

thead是什么东西

HTML code

<table>
<thead>
</thead>
<tbody>
</tobdy>
<tfoot>
</tfoot>
</table>


就是表头
[/Quote]
CSDN真是奇怪,我还不能编辑自己的回复,上面的</tobdy>打错了,应该是</tbody>
xianglf 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 p2227 的回复:]

thead是什么东西
[/Quote]

<table>
<thead>
</thead>
<tbody>
</tobdy>
<tfoot>
</tfoot>
</table>

就是表头
p2227 2011-11-17
  • 打赏
  • 举报
回复
thead是什么东西
xianglf 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhoufeng0401 的回复:]

你为什么要获取table的innerHTML呢,talbe是个整体。你获取的时候要用outerHTML,这样它会把<table>标签一起带着,放div里就行
[/Quote]
这个需求确实是比较怪异,是获取一个存在的thead,然后不要最后一行tr,并且在同一个页面上,不能对原对象进行操作,否则会影响到原对象,当时想的就偷懒,把原thead的innerHTML取出改改生成新的thead不就完了嘛,结果发现还有这么个问题
xianglf 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wldlzt 的回复:]

基本没打好,问问题又没问全
[/Quote]
你要是基础扎实的话,就能说出点见解或者实用的建议了,而不是没用的废话
xianglf 2011-11-17
  • 打赏
  • 举报
回复
找到原因了,innerHTML默认有过滤机制,若innerHTML中声明的元素跟新创建的元素构成层级关系.则innerHTML中的层级关系中的开头关健字就会被过滤掉。
加载更多回复(5)

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧