我对Jquery很新。我正在尝试进行从多个页面检索信息的插件。 我做一个ajax调用并得到一个xml,然后我想选择一个节点的特定文本,xmlc看起来像这样:
<status>
<item>
<name>NameA</name>
<serviceUrl>theURL</serviceUrl>
<timeout>184</timeout>
<errorMessage></errorMessage>
<statusMessage>SpecificMessage</statusMessage>
</item>
<item>
<name>NameB</name>
<serviceUrl>theURL</serviceUrl>
<timeout>200</timeout>
<errorMessage></errorMessage>
<statusMessage>SpecificMessageB</statusMessage>
</item>
<item>
<name>NameC</name>
<serviceUrl>theURL</serviceUrl>
<timeout>300</timeout>
<errorMessage></errorMessage>
<statusMessage>SpecificMessageC</statusMessage>
</item>
</status>
我无法开展工作的代码是:
function parseXml(xml)
{
item = getItemFor(xml, "NameB");
console.log("name: " + item.find("name").text());
console.log("serviceUrl: " + item.find("serviceUrl").text());
console.log("timeout: " + item.find("timeout").text());
}
var getItemFor= function(xml, name){
$(xml).find("item").each(function(){
var itName = $(this).find("name").text();
if (itName === name){
console.log("Found: " + name);
return $(this);
}
});
}
底线,我无法从getItemFor函数中获取名称为nameB的xml项目NODE,而且我也无法停止.each()循环。
答案 0 :(得分:1)
一种解决方法是修改getItemFor
函数以传递从内循环返回的结果:
var getItemFor = function(xml, name) {
var result = null;
$(xml).find("item").each(function() {
var itName = $(this).find("name").text();
if (itName === name) {
console.log("Found: " + name);
result = $(this);
}
});
return result;
}
或完全简化parseXml
(缩减为一个选择器):
function parseXml(xml) {
var item = $('item name:contains("NameB")', xml).parent();
console.log("name: " + item.find("name").text());
console.log("serviceUrl: " + item.find("serviceUrl").text());
console.log("timeout: " + item.find("timeout").text());
}
请参阅此FIDDLE。