簡體   English   中英

使用jquery或javascript在cdata中解析html

[英]parse html inside cdata using jquery or javascript

我收到的網站Feed看起來像這樣

<rss...>
    <title> some title </title>
    <content>
         <![CDATA[ <div>this tag is ignored<div> who took the cookie in the cookie jar!?  ]]>
    </content>
</rss>

我需要在html中顯示cdata的全部內容。 我正在使用jquery 1.9.1,當我使用$(xml).find('rss content').text()獲取內容部分時,它實際上忽略了整個<div>this tag is ignored<div>部分。 有沒有辦法使用javascript或jquery獲取CDATA內的所有內容?

有可能你的標記沒有被jQuery解析為XML。 嘗試顯式調用$ .parseXML()

var contentText = $($.parseXML(xml)).find("rss content").text();

底線:

xmlDoc.getElementsByTagName("content")[0].childNodes[0].nodeValue

來自工作代碼的這段代碼使用jquery加載xml,然后獲取內容標記的第4次出現(包含CDATA)

var req = new AjaxRequest(); 
req.setMethod("POST"); 
...
req.loadXMLDoc(linkString, paramString);
var htmlContent = req.getResponse().responseXML.getElementsByTagName('content').item(3).childNodes[0].nodeValue;

jQuery不是從字符串解析XML文檔的最佳選擇 最好使用瀏覽器的原生DOM Parser。 然后jQuery可以更好地處理解析的XML文檔; 否則我相信它會嘗試像XML那樣產生奇怪的結果。

$xml = $((new DOMParser).parseFromString(xml, "text/xml"));

http://jsfiddle.net/ExplosionPIlls/2MJt9/

編輯:基於另一個答案, $.parseXML可能是一個更好的選擇,因為它應該與其他瀏覽器一起使用,但你必須以與上面類似的方式使用它,因為結果是XML文檔而不是jQuery對象。

$xml = $($.parseXML(xml));

可以通過獲取childNodes數據的第一個來檢索jQuery中CDATA的文本:

!$.ajax(YOUR_URL,{
dataType: 'xml',
success: function (dataR, textStatus, jqXHR){ 
var rrsobj = $(dataR).find('rss');
if(rrsobj ){
  desc = $(rrsobj [0]).children('content');  
  if(desc)
    var txt = desc[0].childNodes[0].data; }
}});

其中dataR是從YOUR_URL讀取的,而txt包含來自CDATA的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM