代码之家  ›  专栏  ›  技术社区  ›  b. e. hollenbeck

奇怪的jQuery XML问题

  •  2
  • b. e. hollenbeck  · 技术社区  · 14 年前

    <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> 是空的,而不是包含字符串。

    在我看来,这与范围界定和 this ,或通过 .children()

    最后一句话:

    将XML标记大小写改为首字母大写,它在所讨论的文档中。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Phil    14 年前

    刚试过,我唯一需要改变的就是 find 匹配XML节点大小写的行,例如

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

    我也改变了 $that 要包含 var 关键字,但在我做那件事之前

    var $that = $(this);
    
        2
  •  3
  •   Tim Down    14 年前

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