2016-12-02 50 views
0

我想專門從xml返回一個數據。返回一個具體的數據

如果nameOfBusiness =餐廳,那麼它返回所有評級(三家餐廳)與一個具有餐廳的物品名稱。

我怎樣才能讓它只警覺一個餐廳,而不包括其他2餐廳(與蒸汽和起源)?

這裏是我的xml:

<resultitem> 
<itemname>Restaurant</itemname> 
<rating>3</rating> 
</resultitem> 
<resultitem> 
<itemname>Restaurant Origins</itemname> 
<rating>4</rating> 
</resultitem> 
<resultitem> 
<itemname>Restaurant Steams</itemname> 
<rating>4.1</rating> 
</resultitem> 

這裏是我的Ajax代碼:

$.ajax({ 
    type: 'GET', 
    url: 'someURL.xml', 
    dataType: 'xml', 
    success: function(xml) { 
    var found = $(xml).find('resultitem itemname:contains("' + nameOfBusiness + '")'); 
    if (!found.length) { 
     alert("Rating not published yet"); 
     return; 
    } 
    found.each(function() { 
     var rating = $(this).parent().find('rating').text(); 
     alert("The rating for " + nameOfBusiness + " is " + rating); 
    }) 
    } 
}); 
+0

,而不是'found.each'循環只是處理第一項'發現[0]' –

回答

0

對於剛剛的第一個項目,你可以使用:

const foundRating = found.first().parent().find('rating').text(); 

您也可以break退出循環false

found.each(function(i, v) { 
    if (i === 0) { 
     var rating = $(this).parent().find('rating').text(); 
     alert("The rating for " + nameOfBusiness + " is " + rating); 
     return false; 
    } 
}); 

jQuery each docs

+0

它的工作,但它會提醒的第一個結果3次... –

+0

我也想知道,我如何使用包含在上的元素?我有但我忘了把它包含在xml中。是否是類似於.... find('resultitem itemname:contains(「'+ nameOfBusiness +'」)itemaddress:contains(「'+ addressOfBusiness +'」)') –

+0

沒有用於驗證文本值的CSS選擇器,但可以像'$('itemname')。map(function(i,v){return $(v).text()});'(這在瀏覽器中工作,但不在JSbin中)。 JSbin需要另外一個函數:'var text = $('itemname')。map(function(i,v){return $(v).text()}); text = $ .makeArray(text);' – amarpatel