2013-08-29 58 views
0

我想構建一個jQuery來從XML文件中選擇項目,我似乎無法將它們正確鏈接在一起。使用鏈接查詢從列表中選擇

我已經解析了一個XML文件,並將其添加到我的DOM,這是一個例子結構

<Products> 
    <product1> 
    <Description>Pound</Description> 
    <ProductType>CUR</ProductType> 
    <CurrencyCode>GBP</CurrencyCode> 
    <Rate>1</Rate></ProductRate> 
    </product1> 
    <product2> 
    <Description>Euro</Description> 
    <ProductType>TCQ</ProductType> 
    <CurrencyCode>Eur</CurrencyCode> 
    <Rate>1.5</Rate></ProductRate> 
    </product2> 
</Products> 

所以我試圖做的是指定我想從XML並顯示採取哪些元素。我可以從XML中選擇所有項目,我可以獲取特定元素,但是當我嘗試獲取所有位置時,例如(ProductType == "CUR")我不能然後選擇代碼並評分,然後添加到我的列表中。

var $xml = $(xml); 
var $list = $('#list'); 
    $prodtype = $xml.find("ProductType"); 

    $prodtype.each(function() { 
    if($(this).text() == "CUR"){ 
    $CurrencyCode = $xml.find("CurrencyCode");  
    $CurrencyCode.each(function() { 
$("#list").append("<li><a>" + $(this).text() + " </a></li>"); 
     }); 
    } 
}); 

我想我很困惑如何選擇和存儲元素。所以在僞代碼我認爲我想要做的是

for each element where producttype == cur 
grab next 2 siblings and append to list 

希望這是明確的嗎?

回答

1
var $xml = $(xml); 
var $list = $('#list'); 

$prodtype = $xml.find("ProductType"); 

$prodtype.each(function() { 
    var self = $(this); 
    if(self.text() == "CUR") { 
     var 
      $CurrencyCode = self.next('CurrencyCode') 
      $Rate   = $CurrencyCode.next('Rate')   
     ; 
     $("#list").append("<li><a>" + $Rate.text()+$CurrencyCode.text() + " </a></li>"); 

    } 
}); 
1

您可能需要使用parent()方法上升到一個級別,然後返回到子貨幣(如果適用,還可以進行評級)。

$prodtype.each(function() { 
    if($(this).text() == "CUR"){ 
     var $parent = $(this).parent(); 
     var $CurrencyCode = $parent.find("CurrencyCode");  
     $("#list").append("<li><a>" + $CurrencyCode.text() + " </a></li>"); 
    } 
} 
0

如果我正確理解你的問題,你可以使用嵌套調用map()

$xml.find("ProductType").map(function() { 
    return $(this).nextAll().slice(0, 2).map(function() { 
     return $("<li><a>" + $(this).text() + "</a></li>"); 
    }); 
}).appendTo("#list"); 

外呼項目從<ProductType>元素接下來的兩個兄弟姐妹,和內心的召喚項目來自這些兄弟姐妹文本的新列表項目。從那裏,你可以通過一個電話appendTo()填寫你的清單。

1

試試這個 -

$prodtype.each(function() { 
    if($(this).text() == "CUR"){ 
    $CurrencyCode = $(this).siblings().find("CurrencyCode"); 
    $("#list").append("<li><a>" + $CurrencyCode.text() + " </a></li>");   
    } 
}); 

更多關於.siblings()