Jquery根据其中一个孩子的值查找XML元素
问题描述:
我正在研究一个简单的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>
元素是什么所以我可以遍历并显示所有人的信息。任何帮助,将不胜感激。
答
嗯,我不知道你想如何选择<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...
});
你是说你只想使用带有特定名字的''?是否有其他一些标准来选择你想要的人? –
user113716
2010-06-17 17:27:36