需要使用jQuery在XML中的标记下找到标记

时间:2012-01-17 09:47:22

标签: jquery-selectors

我将此xml作为Ajax调用的responseXml的一部分:

<banner-ad>
    <title><span style="color:#ffff00;"><strong>Title</strong></span></title>
</banner-ad>

当我使用这个jQuery(responseXml).find(“title”)。text();结果是“标题”。 我也尝试了jQuery(responseXml).find(“title:first-child”),但结果是[object Object]。

我想得到结果:

<span style="color:#ffff00;"><strong>Title</strong></span>

请告诉我如何在jQuery中执行此操作。

提前感谢您的帮助。

此致 RACS

2 个答案:

答案 0 :(得分:0)

这可能有用:

$(responseXml).find("title").html();

答案 1 :(得分:0)

您的问题是,您不能简单地将一个文档(XML响应)中的节点附加到另一个文档(您的HTML页面)。这个问题有两个方面:

  1. 您可以使用jQuery将XML文档中的节点附加到HTML页面。这有效;节点出现在HTML DOM中,但它们保留XML节点,因此浏览器会忽略style属性。因此,文本不会为黄色(#ffff00)。
  2. 据我所知,jQuery没有提供从XML节点获取XML字符串(即序列化节点)的内置方法。 jQuery可以很好地处理XML文档,但是没有相当于.html()在HTML文档中的作用。
  3. 为了完成这项工作,我们需要从XML文档中提取XML字符串。有些浏览器支持XML节点(即IE)上的.xml属性,其他浏览器都带有XMLSerializer对象:

    // find the proper XML node
    var $title = $(doc).find("title");
    
    // either use .xml or, when unavailable, an XMLSerializer 
    var html = $title[0].xml || (new XMLSerializer()).serializeToString($title[0]);
    
    // result:
    // '<title><span style="color:#ffff00;"><strong>Title</strong></span></title>'
    

    然后我们必须将此HTML字符串提供给jQuery,以便可以从中创建新的,真实的HTML元素:

    $("#target").append(html);
    

    有一个小提琴可以显示这个:http://jsfiddle.net/Tomalak/QWHj8/。这个例子也摆脱了多余的<title>元素。


    反正。如果您有机会影响XML本身,那么更改它是有意义的:

    <banner-ad>
        <title>&lt;span style="color:#ffff00;"&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/span&gt;</title>
    </banner-ad>
    

    只需对<title>的有效负载进行XML编码,您就可以在jQuery中执行此操作:

    $("#target").append( $(doc).find("title").text() );