Reputation: 1939
I'm getting a website feed that looks like this
<rss...>
<title> some title </title>
<content>
<![CDATA[ <div>this tag is ignored<div> who took the cookie in the cookie jar!? ]]>
</content>
</rss>
I need the entire content of the cdata to be displayed in the html. I'm using jquery 1.9.1 and when I get the content part using $(xml).find('rss content').text()
,
it actually ignores the whole <div>this tag is ignored<div>
part. Any way to get everything inside the CDATA using javascript or jquery?
Upvotes: 13
Views: 20337
Reputation: 1
text from CDATA in jQuery can be retrieved by get first of childNodes data:
!$.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; }
}});
where dataR was read from YOUR_URL and txt contains info from CDATA
Upvotes: 0
Reputation: 9554
bottomline:
xmlDoc.getElementsByTagName("content")[0].childNodes[0].nodeValue
this snippet from working code uses jquery to load xml and then gets the 4th occurence of the content tag (which contains CDATA)
var req = new AjaxRequest();
req.setMethod("POST");
...
req.loadXMLDoc(linkString, paramString);
var htmlContent = req.getResponse().responseXML.getElementsByTagName('content').item(3).childNodes[0].nodeValue;
Upvotes: 5
Reputation: 262919
Chances are your markup is not parsed as XML by jQuery. Try explicitly invoking $.parseXML():
var contentText = $($.parseXML(xml)).find("rss content").text();
Upvotes: 6
Reputation: 191729
jQuery is not the best at parsing XML documents from a string. It would be better to use the browser's native DOM Parser. jQuery can then work with the parsed XML document much better; otherwise I believe it will try to work with it like XML which produces weird results.
$xml = $((new DOMParser).parseFromString(xml, "text/xml"));
http://jsfiddle.net/ExplosionPIlls/2MJt9/
EDIT: based on the other answer, $.parseXML
is possibly a better option since it should work with other browsers, but you would have to use it in a similar fashion to the above since the result is an XML document rather than a jQuery object.
$xml = $($.parseXML(xml));
Upvotes: 2