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 和第二个警报 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 添加到 DOM 以在 xml 上应用过滤器。之后,您可以将其删除。

现场演示

$('#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 回答