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 和第二个警报 3,答案应该是这样的。

但我得到相同的响应每个警报。请检查并告诉我您的建议。谢谢

4

1 回答 1

1

您可能想使用带有函数参数的 jQuery 的.filter方法:

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

这是JS Fiddle可以玩的。我显然必须自己构建 XML 字符串,并且我摆脱了replace代码,因为parseInt它更适合从字符串中解析整数部分。

.each只是为某个集合的每个元素调用一些代码,但它不收集结果(就像.map.filter做的那样) - 事实上,它只是返回原始集合。return函数中的语句唯一有用的.each是它可以用来中断迭代(当falsy返回值时)。

于 2012-10-23T07:32:26.867 回答