1

私はJqueryにかなり慣れていません。複数のページから情報を取得するプラグインを実行しようとしています。ajax呼び出しを実行してxmlを取得し、1つのノードの特定のテキストを選択したい場合、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アイテムNODEを取得できず、.each()ループを停止することもできません。

4

1 に答える 1

1

getItemFor回避策の1つは、内部ループから返された結果を渡すように関数を変更することです。

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します(1つのセレクターに減らします):

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 に答える