2010-06-17 106 views
3

我正在研究一个简单的XML电话簿应用程序来学习JQuery,但我无法弄清楚如何做这样的事情: 当用户进入在文本框中的联系人的第一个名字,我想查找该人的整个记录​​。该XML看起来是这样的:Jquery根据其中一个孩子的值查找XML元素

<phonebook> 
<person> 
    <number> 555-5555</number> 
    <first_name>Evelyn</first_name> 
    <last_name>Remington</last_name> 
    <address>Edge of the Abyss</address> 
    <image>path/to/image</image> 
</person> 
<person> 
    <number>+34 1 6444 333 2223230</number> 
    <first_name>Max</first_name> 
    <last_name>Muscle</last_name> 
    <address>Mining Belt</address> 
    <image>path/to/image</image> 
</person> 
</phonebook> 

,我已经能够与jQuery的做的最好的是这样的:

var myXML; 
function searchXML(){ 
    $.ajax({ 
    type:"GET", 
    url: "phonebook.xml", 
    dataType: "xml", 
    success: function(xml){myXML = $("xml").find("#firstNameBox").val())} 
    }); 
} 

我希望它做的是返回整个<person>元素是什么所以我可以遍历并显示所有人的信息。任何帮助,将不胜感激。

+0

你是说你只想使用带有特定名字的''?是否有其他一些标准来选择你想要的人? – user113716 2010-06-17 17:27:36

回答

6

嗯,我不知道你想如何选择<person>或你想如何显示结果,但这个例子会找到Evelyn,并将相关信息放入一个变量;

var myXML; 

function searchXML(){ 
    $.ajax({ 
    type:"GET", 
    url: "phonebook.xml", 
    dataType: "xml", 
    success: function(xml){ 
       // Filter Evelyn out of the bunch 
      myXML = $(xml).find("person").filter(function() { 
       return $(this).find('first_name').text() == "Evelyn"; 
      }); 

       // Store a string with Evelyn's info in the display variable 
      var display = myXML.children().map(function() { 
       return this.tagName + '=' + $(this).text(); 
      }).get().join(' '); 

       // alert the result 
      alert(display); 
     } 
    }); 
} 
searchXML(); 

编辑:

当你说你想“回归”的<person>,要知道,你不能简单地恢复它,你会在常规功能。在接收到AJAX响应之前,其余代码可能已完成执行,因此任何访问myXML变量中的<person>的尝试都将导致值为undefined

相反,你需要执行您想要success回调无论操纵,或者你需要把它放在另一个函数中,并调用该函数从success回调中。

我给出的例子是里面的工作。

虽然我仍然不确定你是如何选择哪个人的。如果你想对每一个进行操作,那么你会这样做循环。例如,您可以使用:

$(xml).find("person").each(function() { 
    // do your processing... 
}); 
相关问题