3
  <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を取得しています。

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

//コードを追加したい

for (i = 0; i < items.length && i < 40; i++) {
var bRank = items[i].getAttribute("rank");
}

//コードを追加したい

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

2 に答える 2

1

これを試して、

ライブデモ

var items = $('item').filter(function(){
  if(parseFloat($(this).attr('rank')) > 0)
      return this;
});

for (i = 0; i < items.length && i < 40; i++) {
   var bRank = items[i].getAttribute("rank");
}

xmlにフィルターを適用するには、xmlをDOMに追加する必要があります。その後、それを削除することができます。

ライブデモ

$('#div1').html(xmlDoc); 
var items = $('#div1 item').filter(function(){
  if(parseFloat($(this).attr('rank')) > 0)
      return this;
});
$('#div1').remove();

for (i = 0; i < items.length && i < 40; i++) {
   var bRank = items[i].getAttribute("rank");
}
于 2012-10-20T09:36:14.393 に答える
0
var filteredArray = [];

for (i = 0; i < items.length && i < 40; i++) {
  if(parseFloat(items[i].getAttribute("rank"), 10) > 0) {
    filteredArray.push(items[i]);
  }
}

filteredArrayすると、すべてのアイテムが含まれますrank > 0

于 2012-10-20T09:34:45.873 に答える