2010-07-09 90 views
2

我有一个web服务,返回html字符串作为响应。我想在div元素中显示响应。我从服务中得到的响应是如何将html字符串转换为html dom元素?

<span style="text-indent: 29px;padding-top:35px;font-size: 16pt;font-family: Arial;color: #FFFFFF;font-weight: bold;position: absolute;text-decoration: none;">89</span> 
<span style="text-indent: 41px;padding-top: 58px;font-size: 8pt;letter-spacing: 1px;font-family: Arial;color: #E5DA95;font-weight: bold;position: absolute;text-decoration: none">89</span> 
<span style="text-indent: 55px;padding-top: 58px;font-size: 8pt;letter-spacing: 1px;font-family: Arial;color: #E5DA95;font-weight: bold;position: absolute;text-decoration: none">-</span> 
<span style="text-indent: 59px;padding-top: 58px;font-size: 8pt;letter-spacing: 1px;font-family: Arial;color: #E5DA95;font-weight: bold;position: absolute;text-decoration: none">92</span> 
<img src="https://www.autocheck.com/members/img/freeLinkScore/scoreBanner4.gif" height="75" width="75" border="0"> 

我使用了语句div.innerHTML = response;

响应显示为文本而不是HTML。有人可以告诉我如何显示在div内的HTML响应。

+1

你确定它的返回HTML和不逃避都喜欢<和>标签的?如果你使用jQuery,你可以使用$(“#myDiv”)。html(response); – Fosco 2010-07-09 19:10:37

+0

响应被编码。我需要在响应中将<和>替换为html吗?我不使用JQuery – kishore 2010-07-09 19:40:52

回答

1

如果这是您的web服务,请将其更改为输出un-HTML编码的响应。

否则,您必须先将HTML解码为响应,然后再将其设置为内容。 我寻找一个轻量级的解码器,找不到比简单的正则表达式更强大的解码器。

因此,这可能会适合您的直接需求,只要注意它可以打破某些内容组合(在这种情况下似乎不太可能)。

response = response.replace (/&lt;/ig, '<').replace (/&gt;/ig, '>'); 


PS:请确保该网络服务器不能为您提供恶意HTML,如<script>标签。

1

设置元素的innerHTML属性不会导致该内容被编码;它的目的是专门用于获取和设置元素中的HTML

如果响应是html编码,请仔细检查您从服务器获取的实际响应文本,并确保它不在服务器端进行编码。您所看到的回复可能仅仅是文本的HTML呈现版本,这将解释您如何看到三角括号而不是实际的html编码文本。

+0

感谢Nathan, 我发现响应正在编码。我们是否有内置的功能来解码响应并将其分配给DIV元素的innerHTML – kishore 2010-07-09 19:23:17

+0

只需对它进行编码即可开始。或者,如果它是由您无法控制的进程发生的,并且您直接从JavaScript调用它,则需要创建一个函数来搜索并替换所有标准HTML编码字符与其未编码的等效字符。尽管如此,我还是不去编码它。 – 2010-07-10 12:09:29

0

您div.innerHTML设定成类似

<span style="text-indent: 29px;padding-top:35px;font-size: 16pt;font-family: Arial;color: #FFFFFF;font-weight: bold;position: absolute;text-decoration: none;">89</span> 

是行不通的,因为该文本没有HTML编码,所以JavaScript是治疗像转义序列的报价。如果它是html编码的,你会看到&quot;代替引号。要编码它,你应该可以使用Server.HtmlEncode方法。

0

你可以分两个步骤执行此操作:

div.innerHTML = response; 
var htmlstring=div.innerText||div.textContent; 
div.innerHTML=htmlstring;