2012-10-20 65 views
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。如何使用jquery过滤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 我要添加过滤器只有在这个palce,所以我的休息代码不会改变。 那么我怎么能过滤项目变量,并获得其他变量的过滤器值。所以循环不受影响。 我可以在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

试试这个,

Live Demo

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应用滤镜。之后你可以删除它。

Live Demo

$('#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"); 
} 
+0

感谢您的回答,但在我的情况下,它返回0. –

+0

我已经更新了我的答案,你需要把它放在DOM中才能得到结果。试一试。 – Adil

+0

感谢您的回答。仍然得到0.我正在使用其他js文件。这是0的原因。 –

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所有项目。

+0

谢谢你的回答。 我想追加不起作用。你能检查一下并提出建议吗? –

+0

@PankajMishra糟糕,对不起,它是'.push'而不是'.append'。 – Dogbert

+0

推动不起作用。如果我使用这个“filteredArray.push(items [i]);” 然后我不能用这样的循环。我无法使用此代码“var bRank = items [i] .getAttribute(”rank“);”。请检查并建议我。 –