0

次のコードがあります。

var actionsAllowed = $(packet).find('actionsAllowed').get();

var actionArray = $(actionsAllowed).each(function () {
    var actionNodes = this.childNodes;
    var actionNumber = actionNodes.length;
    var array = new Array(actionNumber)

    for (var i = 0; i < actionNodes.length; i++) {
        var action = actionNodes[i].nodeName
        array[i] = action
        console.log(action);
    }
    return array;
});

これは、パケット (XML) を検索し、"actionsAllowed"それを として返します"[actionsAllowed]"

次に、配列にリストされている各アクションで配列を作成しようとしています。

はandなしに"this"なり、「NodeList[ActionOne, ActionTwo, ActionThree]」の形式で子ノードを返すことができます。次に、NodeList の長さを取得し、その長さの配列を作成します。"actionsAllowed""[ ]"

次に、NodeList を繰り返し処理し、それぞれを配列に追加します。

最後に、配列を として返します"[ActionOne, ActionTwo, ActionThree]"。これは素晴らしいことです。

しかし - これが問題です:

変数"actionArray""Object[actionsAllowed]"、配列ではなく になります。

これはなぜですか?私は理論を持っていますが、それを修正することはできません=(

ありがとうございました!

4

2 に答える 2

1

$(actionsAllowed).each反復の最初の要素を返します。あなたはこれを望んでいるようです:

var actionArray = [];
$(actionsAllowed).each(function () {
    var actionNodes = this.childNodes;
    var actionNumber = actionNodes.length;
    var array = new Array(actionNumber)

    for (var i = 0; i < actionNodes.length; i++) {
        var action = actionNodes[i].nodeName
        array[i] = action
        console.log(action);
    }
    actionArray.push(array);
});    

編集:配列の配列ではなく大きな配列が必要な場合は、次のように変更します

var actionArray = [];
$(actionsAllowed).each(function () {
    var actionNodes = this.childNodes;
    for (var i = 0; i < actionNodes.length; i++) {
        var action = actionNodes[i].nodeName
        actionArray.push(action);
        console.log(action);
    }
});    
于 2013-11-12T15:55:30.400 に答える
1

別の方法を次に示します。

var actionArray = $('actionsAllowed > *').map(function (el) { 
    return el.nodeName; 
}).get();
于 2013-11-12T18:38:49.887 に答える