我有这个简单的xml
<?xml version="1.0"?>
<library>
<item name="box_shelf">
<imageback src="images/box_shelf_color.png"/>
<outline src="images/box_shelf_outline.png"/>
<sku>
<wh sku="4696424171" />
<ch sku="4696424179" />
<choc sku="4696425863" />
<ma sku="4696424175" />
</sku>
</item>
</library>
加载xml很好。然后我有一个解析某些节点的函数。
function parseImageXml(mainNode,targetNode) {
$(libraryXML).find('item').each(function() {
if($(this).attr('name') == mainNode) {
var $temp = $(this).find(targetNode).attr('src');
console.log("******"+$temp);
return $temp;
}
});
}
控制台日志可以正常使用
******images/box_shelf_outline.png
******images/box_shelf_color.png
但是当我尝试将值返回变量时,我得到了未定义。
var image_outline = parseImageXml("box_shelf","outline");
var image_back = parseImageXml("box_shelf","imageback");
console.log(image_outline+":"+image_back);
undefined:undefined
任何见解都会很棒,谢谢
答案 0 :(得分:0)
您将返回each
回调中的值,因此外部函数的返回值仍为undefined
。创建一个数组,在回调中将值推入其中,将数组返回到each
之外。
function parseImageXml(mainNode, targetNode) {
var targets = [];
$(libraryXML).find('item').each(function() {
if ($(this).attr('name') == mainNode) {
var $temp = $(this).find(targetNode).attr('src');
console.log("******" + $temp);
targets.push($temp);
}
});
return targets;
}
var image_outline = parseImageXml("box_shelf","outline")[0];
var image_back = parseImageXml("box_shelf","imageback")[0];
console.log(image_outline+":"+image_back);
答案 1 :(得分:0)
您没有从parseImageXml函数返回任何内容。请尝试更改为以下内容:
function parseImageXml(mainNode,targetNode) {
var $temp; //Declare your scope variable.
$(libraryXML).find('item').each(function() {
if($(this).attr('name') == mainNode) {
$temp = $(this).find(targetNode).attr('src');// Assign to the scoped variable
console.log("******"+$temp);
return false; //Exit your for each loop
}
});
return $temp;
}