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 に答える