如何在使用Javascript的innerHTML时保留html

时间:2011-09-23 14:37:19

标签: javascript innerhtml

一切正常,decodeURIComponent(xmlhttp.responseText)作为html从解析脚本返回,通过alert检查,控制台没有错误,但是用

替换html到编辑器
retHTML.innerHTML =decodeURIComponent(xmlhttp.responseText);

似乎有一个将我的html翻译成编码的html(&&)等的“功能”。 我不确定为什么说它是内部html的命令会阻止你实际使用html? innerText简单地放大了这个而不是像隐含的那样返回html自由文本。如何将返回的html作为我请求的html返回到div?

function setHTML(retHTML)
{
retHTML.innerText =retHTML.innerHTML; }

function setTEXT(retHTML)
{
var tmpTXT =encodeURIComponent(retHTML.innerText);
var xmlhttp;
xmlhttp=new XMLHttpRequest(); 
xmlhttp.onreadystatechange=function()
{ retHTML.innerHTML =decodeURIComponent(xmlhttp.responseText);  }
xmlhttp.open("POST","path.php",true);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.send('send=' + tmpTXT); }

测试标记如下

<object width="853" height="510">
<param name="movie" value="http://www.youtube.com/v/iaysTVcounI?version=3&amp;hl=en_US&amp;rel=0">
<param name="allowFullScreen" value="true">
<param name="allowscriptaccess" value="always">
<embed src="http://www.youtube.com/v/iaysTVcounI?version=3&amp;hl=en_US&amp;rel=0&amp;autoplay=1" type="application/x-shockwave-flash" width="853" height="510" allowscriptaccess="always" allowfullscreen="true">
</object> 

应该是

<object width="853" height="510">
<param name="movie" value="http://www.youtube.com/v/iaysTVcounI?version=3&hl=en_US&rel=0">
<param name="allowFullScreen" value="true">
<param name="allowscriptaccess" value="always">
<embed src="http://www.youtube.com/v/iaysTVcounI?version=3&hl=en_US&rel=0&autoplay=1" type="application/x-shockwave-flash" width="853" height="510" allowscriptaccess="always" allowfullscreen="true">
</object>

2 个答案:

答案 0 :(得分:2)

innerHTML在您阅读时是一个解析器,在您阅读时是一个序列化器,而不是一个存储文本的简单属性。

当您写入innerHTML时,它会将HTML源文本转换为DOM对象,如Element,Attr和TextNode。正是这些DOM对象反映了浏览器窗口中文档的真实状态,任何看起来像HTML源的东西。

在编写时,任何对DOM中存储的“信息集”不重要的信息都将丢失。这包括大小写(标记是<b>还是<B>),属性顺序,标记内的空格,实体和字符引用(即您是否说café,{{1} }或caf&#233; - 它与HTML解析器完全相同)等等。

回读你刚才写的caf&eacute;将重新序列化已解析的DOM并给你回复一些与你输入的字符串不同的字符串。如果你在原始HTML中犯了错误,您还会发现输出已经过更正,以反映HTML解析器能够读取您放入的内容所做的事情。因此,无效的裸露&符号必然会变为innerHTML

(我不确定你指的是什么样的'编辑',但是如果它是&amp;那么这将在任何HTML中另外修复<textarea><你写信给它,因为textarea不能包含标记。你在&lt;中传回URL编码的数据也是相当奇怪和不必要的;你确定这是发生了什么吗?)

ETA:

  

应为value =“http://www.youtube.com/v/iaysTVcounI?version=3&hl=en_US&rel=0”

不,不应该。这不是有效的HTML。将responseText转换为&绝对是正确的,必须要做的事情。

答案 1 :(得分:0)

我觉得这是一个有点贫民区,但最终以下将是我的修复。我建议将其作为innerHTML的替代,以替换字符串。

retHTML.innerHTML ='';  
retHTML.execCommand('insertHTML',false,xmlhttp.responseText);