2012-10-20 59 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「);」。請檢查並建議我。 –