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]".

然后,我尝试使用数组中列出的每个操作创建一个数组。

"this"变成"actionsAllowed"没有"[ ]"and 允许它以“NodeList[ActionOne, ActionTwo, ActionThree]”的形式返回子节点。然后我得到 NodeList 的长度并创建一个该长度的数组。

然后我遍历 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 回答