0
 <Item id="419" rank="0.0000" date_added="2012-09-24T19:43:14" date_end="2012-10-15T19:43:14" uid="134333" price="  ,-" district="-1" district_text="Friend" cid="9" cid_text="Underholdning" img_height_thumb="433" />
  <Item id="418" rank="0.0000" date_added="2012-09-24T19:17:42" date_end="2012-10-15T19:17:42" uid="134332" price="  ,-" district="-1" district_text="Friend" cid="9" cid_text="Underholdning" img_height_thumb="254" />
  <Item id="405" rank="102.0000" date_added="2012-09-23T18:55:20" date_end="2012-10-14T18:55:20" uid="134331" price="  102,-" district="-1" district_text="Friend" cid="761" cid_text="Mote" img_height_thumb="280" />

これはサンプルのxmlデータです。そして、私はこのコードを使用してxmlを取得しています。

0より大きいすべてのデータランクをフィルタリングしたいと思います。そして、残りのコードが変更されないように、この部分にのみフィルターを追加したいと思います。では、アイテム変数をフィルター処理して、他の変数のフィルター値を取得するにはどうすればよいでしょうか。したがって、ループは影響を受けません。forループで変数の名前を変更できます。

これについて何か考えを教えてください。

xmlDoc = xmlhttp.responseXML;
        var items1 = xmlDoc.getElementsByTagName("Item");

    var items = $(items1).filter('Item').each(function () {
        var bRank = $(this).attr('rank');
        var tempRank = bRank.replace("0000", "").replace(".", "");
        if (tempRank > 0)
            return this;
    });

alert(items.length);
        alert(items1.length);

両方のアラートの答えは3です。

ただし、最初のアラート1と2番目のアラート3の場合、回答は次のようになります。

しかし、アラートごとに同じ応答が返されます。確認して、提案を教えてください。ありがとう

4

1 に答える 1

1

代わりに、jQueryの.filterメソッドを関数の引数とともに使用したいと思うかもしれません。

var items = $(items1).filter(function () {
    var bRank = $(this).attr('rank');
    return parseInt(bRank, 10) > 0;
});

これがJSフィドルです。私は明らかに自分でXML文字列を作成する必要があり、文字列から整数部分を解析するのにはるかに適しているため、replaceコードを削除しました。parseInt

.eachコレクションの要素ごとにコードを呼び出すだけですが、結果は収集されません(.map実際.filterには、元のコレクションを返すだけです)。return関数内のステートメントについての唯一の有用なこと.eachは、反復から抜け出すために使用できることです(falsy値が返されるとき)。

于 2012-10-23T07:32:26.867 に答える