一切正常,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&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>
应该是
<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>
答案 0 :(得分:2)
innerHTML
在您阅读时是一个解析器,在您阅读时是一个序列化器,而不是一个存储文本的简单属性。
当您写入innerHTML
时,它会将HTML源文本转换为DOM对象,如Element,Attr和TextNode。正是这些DOM对象反映了浏览器窗口中文档的真实状态,不任何看起来像HTML源的东西。
在编写时,任何对DOM中存储的“信息集”不重要的信息都将丢失。这包括大小写(标记是<b>
还是<B>
),属性顺序,标记内的空格,实体和字符引用(即您是否说café
,{{1} }或café
- 它与HTML解析器完全相同)等等。
回读你刚才写的café
将重新序列化已解析的DOM并给你回复一些与你输入的字符串不同的字符串。如果你在原始HTML中犯了错误,您还会发现输出已经过更正,以反映HTML解析器能够读取您放入的内容所做的事情。因此,无效的裸露&符号必然会变为innerHTML
。
(我不确定你指的是什么样的'编辑',但是如果它是&
那么这将在任何HTML中另外修复<textarea>
到<
你写信给它,因为textarea不能包含标记。你在<
中传回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);