【问题标题】:parse html inside cdata using jquery or javascript使用 jquery 或 javascript 解析 cdata 中的 html
【发布时间】:2013-02-04 08:15:32
【问题描述】:

我得到一个类似这样的网站供稿

<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() 获取内容部分时, 它实际上忽略了整个&lt;div&gt;this tag is ignored&lt;div&gt; 部分。有什么方法可以使用 javascript 或 jquery 获取 CDATA 中的所有内容?

【问题讨论】:

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

标签: javascript jquery cdata


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    底线:

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

    工作代码中的这个 sn-p 使用 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】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 你说得对,我完全忘记了在$.parseXML() 周围对$() 的额外调用。我更新了我的答案,感谢您的提醒:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-09
        • 1970-01-01
        相关资源
        最近更新 更多