1

我对 Jquery 很陌生。我正在尝试做一个从多个页面检索信息的插件。我做了一个ajax调用并得到一个xml,然后我想选择一个节点的特定文本,xmlc看起来像这样:

<status>
  <item>
    <name>NameA</name>
    <serviceUrl>theURL</serviceUrl>
    <timeout>184</timeout>
    <errorMessage></errorMessage>
    <statusMessage>SpecificMessage</statusMessage>
  </item>
  <item>
    <name>NameB</name>
    <serviceUrl>theURL</serviceUrl>
    <timeout>200</timeout>
    <errorMessage></errorMessage>
    <statusMessage>SpecificMessageB</statusMessage>
  </item>
  <item>
    <name>NameC</name>
    <serviceUrl>theURL</serviceUrl>
    <timeout>300</timeout>
    <errorMessage></errorMessage>
    <statusMessage>SpecificMessageC</statusMessage>
  </item>
</status>

我无法工作的代码是:

    function parseXml(xml)
{
    item = getItemFor(xml, "NameB");
    console.log("name: " + item.find("name").text());
    console.log("serviceUrl: " + item.find("serviceUrl").text());
    console.log("timeout: " + item.find("timeout").text());
}

var getItemFor= function(xml, name){
    $(xml).find("item").each(function(){
        var itName = $(this).find("name").text();
        if (itName === name){
            console.log("Found: " + name);
            return $(this);
        }


    });
}

底线,我无法从 getItemFor 函数中获取名称为 nameB 的 xml 项节点,我也无法停止 .each() 循环。

4

1 回答 1

1

一种解决方法是修改您的getItemFor函数以传递从内部循环返回的结果:

var getItemFor = function(xml, name) {
    var result = null;
    $(xml).find("item").each(function() {
        var itName = $(this).find("name").text();
        if (itName === name) {
            console.log("Found: " + name);
            result = $(this);
        }
    });
    return result;
}

或者parseXml完全简化(减少到一个选择器):

function parseXml(xml) {

    var item = $('item name:contains("NameB")', xml).parent();

    console.log("name: " + item.find("name").text());
    console.log("serviceUrl: " + item.find("serviceUrl").text());
    console.log("timeout: " + item.find("timeout").text());
}

看到这个FIDDLE

于 2012-10-26T14:54:45.427 回答