JQuery无法返回xml值

时间:2012-12-11 17:02:31

标签: jquery xml

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

任何见解都会很棒,谢谢

2 个答案:

答案 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;
       }