使用jquery或javascript解析cdata中的html
我得到了一个类似这样的网站提要使用jquery或javascript解析cdata中的html,javascript,jquery,cdata,Javascript,Jquery,Cdata,我得到了一个类似这样的网站提要 <rss...> <title> some title </title> <content> <![CDATA[ <div>this tag is ignored<div> who took the cookie in the cookie jar!? ]]> </content> </rss> 一些头衔 忽略
<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()获取内容部分时,
它实际上忽略了整个这个标记被忽略了部分。有没有办法使用javascript或jquery获取CDATA中的所有内容?很可能jquery没有将标记解析为XML。尝试显式调用:
jQuery并不擅长从字符串解析XML文档。最好使用浏览器的原生DOM解析器。然后jQuery可以更好地处理解析后的XML文档;否则,我相信它会像XML一样使用它,从而产生奇怪的结果
$xml = $((new DOMParser).parseFromString(xml, "text/xml"));
编辑:根据另一个答案,$.parseXML
可能是一个更好的选项,因为它应该与其他浏览器一起使用,但您必须以与上面类似的方式使用它,因为结果是XML文档而不是jQuery对象
$xml = $($.parseXML(xml));
底线:
xmlDoc.getElementsByTagName("content")[0].childNodes[0].nodeValue
此工作代码片段使用jquery加载xml,然后获取第四个出现的内容标记(包含CDATA)
jQuery中CDATA中的文本可以通过获取第一个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; }
}});
从URL读取数据,txt包含来自CDATA的信息,CDATA意味着对解析器隐藏数据,这样就不会将数据作为HTML解析到DOM中。我试图理解为什么您的html隐藏在CDATA中?你能把它放进ajax吗?你试过用html()
而不是text()
?你说得对,我完全忘记了在$周围对$()
的额外调用。parseXML()
。我更新了我的答案,谢谢提醒:)
var req = new AjaxRequest();
req.setMethod("POST");
...
req.loadXMLDoc(linkString, paramString);
var htmlContent = req.getResponse().responseXML.getElementsByTagName('content').item(3).childNodes[0].nodeValue;
!$.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; }
}});