我正在研究一个简单的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>
Run Code Online (Sandbox Code Playgroud)
我能用jQuery做的最好的事情是这样的:
var myXML;
function searchXML(){
$.ajax({
type:"GET",
url: "phonebook.xml",
dataType: "xml",
success: function(xml){myXML = $("xml").find("#firstNameBox").val())}
});
}
Run Code Online (Sandbox Code Playgroud)
我想要它做的是返回整个<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();
Run Code Online (Sandbox Code Playgroud)
编辑:
当您说要"返回"时<person>
,请注意您不能像在常规函数中那样简单地返回它.你的代码的其余部分可能已经执行完毕接收到AJAX响应之前,因此任何试图访问<person>
的myXML
变量将导致一个值undefined
.
相反,你需要执行任何你想要的操作里面的success
回调,或者你需要把它放在另一个函数中,并调用该函数从内success
回调.
我给出的例子完成了内部的工作.
我仍然不确定你想要选择哪个人是怎么回事.如果你想对每一个进行操作,那么你会在一个循环中这样做.例如,您可以使用:
$(xml).find("person").each(function() {
// do your processing...
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11048 次 |
最近记录: |