2013-02-19 25 views
11

sto diventando un feed sito che assomiglia a questoparse html all'interno CDATA utilizzando jQuery o JavaScript

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

mi serve l'intero contenuto del CDATA da visualizzare nel codice HTML. Sto usando jQuery 1.9.1 e quando ottengo la parte di contenuto usando $(xml).find('rss content').text(), in realtà ignora l'intera parte <div>this tag is ignored<div>. Un modo per ottenere tutto all'interno del CDATA usando javascript o jquery?

+0

CDATA ha lo scopo di nascondere i dati dal parser, in modo che non venga analizzato nel DOM come HTML. Sto cercando di capire perché il tuo html è nascosto in CDATA? Puoi solo provare? –

+0

Hai provato a usare 'html()' invece di 'text()'? – Stefan

risposta

6

È probabile che il markup non venga analizzato come XML da jQuery. Prova esplicitamente invocando $.parseXML():

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

jQuery non è il migliore al parsing di documenti XML da una stringa. È preferibile utilizzare il parser DOM DOM del browser. jQuery può quindi lavorare molto meglio con il documento XML analizzato; altrimenti credo che proverà a lavorarci come XML che produce risultati strani.

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

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

EDIT: sulla base della altra risposta, $.parseXML è forse una scelta migliore in quanto dovrebbe funzionare con altri browser, ma si dovrebbe usarlo in un modo simile al precedente in quanto la risultato è un documento XML piuttosto che un oggetto jQuery.

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

Hai ragione, ho completamente dimenticato la chiamata aggiuntiva a '$()' attorno a '$ .parseXML()'. Ho aggiornato la mia risposta, grazie per l'heads-up :) –

3

bottomline:

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

questo frammento da codice funzionante utilizza jQuery per caricare XML e quindi ottiene il 4 ° occorrenza del tag contenuti (che contiene CDATA)

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

testo da CDATA in jQuery può essere recuperato ottenendo il primo dei dati childNodes:

!$.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; } 
}}); 

dove dataR è stato letto da YOUR_URL e txt contiene informazioni da CDATA