<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,答案应该是这样的。
但是每个警报都得到相同的响应。请检查并告诉我你的建议。感谢
答案 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
时的值)。