Ответ 1
Скорее всего, ваша разметка не обрабатывается как XML jQuery. Попробуйте явно вызвать $. ParseXML():
var contentText = $($.parseXML(xml)).find("rss content").text();
Я получаю фид веб-сайта, который выглядит как
<rss...>
<title> some title </title>
<content>
<![CDATA[ <div>this tag is ignored<div> who took the cookie in the cookie jar!? ]]>
</content>
</rss>
Мне нужно все содержимое cdata, которое будет отображаться в html. Я использую jquery 1.9.1, и когда я получаю часть контента с помощью $(xml).find('rss content').text()
,
он фактически игнорирует часть <div>this tag is ignored<div>
. Любой способ получить все внутри CDATA с помощью javascript или jquery?
Скорее всего, ваша разметка не обрабатывается как XML jQuery. Попробуйте явно вызвать $. ParseXML():
var contentText = $($.parseXML(xml)).find("rss content").text();
Bottomline:
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/
EDIT: на основе другого ответа $.parseXML
, возможно, является лучшим вариантом, так как он должен работать с другими браузерами, но вам придется использовать его аналогично выше, поскольку результат - это XML-документ, а не объект jQuery.
$xml = $($.parseXML(xml));
текст с CDATA в jQuery можно получить, получив сначала данные 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; }
}});
где dataR был прочитан с YOUR_URL, а txt содержит информацию из CDATA