2010-07-09 111 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;