0

我有这个简单的 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

任何见解都会很棒,谢谢

4

2 回答 2

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);
于 2012-12-11T17:05:23.477 回答
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;
       }
于 2012-12-11T17:23:50.500 回答