2010-06-17 66 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... 
}); 
相關問題