繁体   English   中英

Jquery根据其中一个子元素的值查找XML元素

[英]Jquery Find an XML element based on the value of one of it's children

我正在研究一个简单的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>元素,这样我就可以迭代并显示所有人的信息。 任何帮助,将不胜感激。

好吧,我不确定你想如何选择<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...
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM