奇怪的jQuery XML问题

时间:2010-11-06 04:24:00

标签: javascript jquery xml

我在XML文档中有一个引号列表。每个报价都包含这样:

<Item>
    <Quote>This is a quote!</Quote>
    <Source>-- this is the Source of the Quote!</Source>
</Item>

这是jQuery:

    var html = '';
    var tmpl = '<li class=""><p class="quote">__quote</p><p class="source">__source</p></li>';

    $(quoteObj).find('Item').each(function(){ 

        $that = $(this);

        var _quote = $that.children('Quote').text();
        var _source = $that.children('Source').text();

        var qhtml = tmpl.replace('__quote', _quote).replace('__source', _source);

        html += qhtml;

    });

   return html;

在最终产品中,QUOTES都在那里,但SOURCES却没有。我不能为我的生活找出原因。在我面前,我看不到什么?

回答评论的其他信息:

  1. XML格式正确,我在上面进行了更改。
  2. 我添加了var tmpl行来显示我在循环中替换的内容。 __quote正在被替换,__source至少会被采取行动,因为第二个<p>是空的,而不是包含字符串。
  3. 我已经检查了从AJAX调用返回的实际XML,它就在那里,应该是。
  4. 在我看来,这是与范围和this.children()方法的操作有关的某种问题,但我仍然无法找到它。

    最后一次注意:

    将XML标记大小写更改为Initial Caps,它位于相关文档中。

2 个答案:

答案 0 :(得分:3)

jQuery不解析XML。将XML字符串传递给$()只需将字符串指定为元素的innerHTML属性,该元素具有可变且不可预测的结果。您需要使用浏览器的内置XML解析器自己解析XML,然后将生成的文档传递给jQuery:

var parseXml;

if (window.DOMParser) {
    parseXml = function(xmlStr) {
       return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
    };
} else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) {
    parseXml = function(xmlStr) {
        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlStr);
        return xmlDoc;
    };
} else {
    parseXml = function() { return null; }
}


var xmlStr = "<Item><Quote>This is a quote!</Quote><Source>-- this is the Source of the Quote!</Source></Item>";

var xmlDoc = parseXml(xmlStr);
$xml = $(xmlDoc);

$xml.find('Item').each(function() {
    // Do stuff with each item here
    alert("Item");
});

答案 1 :(得分:1)

试过这个,我唯一需要改变的是find行以匹配XML节点的情况,例如

$(quoteObj).find('ITEM').each( function() {

我还更改了$that分配行以包含var关键字,但在我执行此操作之前它已经正常工作

var $that = $(this);