问题 使用jquery或javascript在cdata中解析html


我收到的网站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内的所有内容?


13098
2018-02-19 15:23


起源

CDATA旨在隐藏解析器中的数据,因此不会将其作为HTML解析到DOM中。我想了解为什么你的HTML隐藏在CDATA中?你能把它放进去吗?
你尝试过使用过吗? html() 代替 text()? - Stefan


答案:


有可能你的标记没有被jQuery解析为XML。尝试显式调用 $ .parseXML()

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

6
2018-02-19 15:29





底线:

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;

3
2017-12-06 16:14





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));

1
2018-02-19 15:32



你是对的,我完全忘记了额外的电话 $() 周围 $.parseXML()。我更新了我的答案,谢谢你的单挑:) - Frédéric Hamidi


可以通过获取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的信息


0
2018-04-30 14:55