如何在jquery的帮助下从xml中获取一些过滤数据?

时间:2012-10-23 07:26:49

标签: jquery xml xml-parsing xmlhttprequest

 <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,答案应该是这样的。

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

1 个答案:

答案 0 :(得分:1)

你可能想用jQuery的.filter方法代替 function 参数:

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时的值)。