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

希望这很清楚吗?

4

4 回答 4

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>");
    }
}
于 2013-08-29T10:14:42.017 回答
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>");

    }
});
于 2013-08-29T10:17:10.203 回答
1

尝试这个 -

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

有关.siblings()的更多信息

于 2013-08-29T10:22:52.160 回答
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()

于 2013-08-29T10:19:47.427 回答