2010-06-17 6 views
3

JQuery를 배우기 위해 간단한 XML 전화 번호부 응용 프로그램에서 작업 중이며 다음과 같은 작업을 수행 할 수 없습니다. 사용자가 들어갈 때 텍스트 상자에있는 연락처의 이름입니다. 그 사람의 전체 기록을 찾고 싶습니다. 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를 함께 할 수 있었던 최선의이 같은 것입니다 : 나는 그것을 전체 <person> 요소를 반환되어 수행 할 작업을

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

그래서 나는 그 사람의 모든 정보를 반복해서 보여줄 수있다. 어떤 도움을 주시면 감사하겠습니다.

+0

특정 이름으로 만 ''으로 작업하고 싶다는 말입니까? 원하는 사람을 선택하기위한 다른 기준이 있습니까? – user113716

답변

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 응답을 받기 전에 실행을 마쳤으므로 <person>myXML 변수로 액세스하려는 시도는 undefined이됩니다.

대신, 당신은 당신이 내부 success 콜백을 원하는대로 조작을 수행해야하거나 다른 함수 내부에 배치하고, success 콜백 내에서 그 함수를 호출해야합니다.

내가 제출 한 예는 내부 작업입니다.

나는 아직도 당신이 어떤 사람을 선택하고 싶은지 잘 모르겠다. 각각에 대해 작업하고 싶다면 루프를 사용하십시오. 예를 들어, 다음을 사용할 수 있습니다 :

$(xml).find("person").each(function() { 
    // do your processing... 
}); 
관련 문제