2010-07-29 68 views
1

有人可以帮助我从这个XML文档中选择ID = 2的url。通过ajax。通过jquery在xml中选择一个parcticular元素

<images>
<image id=0>
<url>images/pic.jpg</url>
</image>
<image id=1>
<url>images/pic.jpg</url>
</image>
<image id=2>
<url>images/pic.jpg</url>
</image>
</images>

我猜是这样的......但现在它显示在XML中的所有条目。我只希望它加载一个图像,我该怎么做,请吗?

$.ajax({ 
      type: "GET", 
      url: "images.xml", 
      dataType: "xml", 
      success: function(xml) { 
       $(xml).find('image').each(function(){ 
        var id = $(this).attr('id'); //maybe something here????? 
        var url = $(this).find('url').text(); 
        $('.loading').html('<img src='+url+' />'); 
       }); 
      } 
     }); 

回答

2

你可以用attribute-equals selector这样做,像这样:

$.ajax({ 
    type: "GET", 
    url: "images.xml", 
    dataType: "xml", 
    success: function(xml) { 
     var img = $(xml).find('image[id=2]'), 
       id = img.attr('id'), 
       url = img.find('url').text(); 
     $('.loading').html('<img src="'+url+'" />'); 
    } 
}); 

这消除了代码在你身边,因为jQuery会找到你想要的元素,而你只处理那一个元素。

+1

而''image [id = 2]''会是''image [id ='+ somevar +']''如果你有一个名为'somevar'的变量,而不是总是id = 2 – CaffGeek 2010-07-29 16:44:31

+0

谢谢你们,我知道在find()中会添加一些简单的东西,但我无法工作了解它是什么。 我只需要开始工作我的代码效率现在.. 焦油 – 2010-07-30 10:10:43

1

它应该是:

 success: function(xml) { 
      $(xml).find('image').each(function(){ 
       var id = $(this).attr('id'); 

       if (id == 2) 
       { 
        var url = $(this).find('url').text(); 
        $('.loading').html('<img src='+url+' />'); 
       } 
      }); 
     } 

如果你只是想找个image,ID为2,你可以简单地做到这一点,而不是使用each

$(xml).find('image#2 > url').text(); 
+0

感谢,快速的问题,如果#2是一个变量,我会是吗? $(xml).find('image#i> url')? – 2010-07-29 16:27:47

+0

@Admin:是的,但它应该是这样的:'$(xml).find('image#'+ i +'> url')' – Sarfraz 2010-07-29 16:30:22