返回数组和ChildNodes

时间:2013-11-12 15:52:31

标签: javascript jquery arrays iteration children

我有以下代码:

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;
});

搜索"actionsAllowed"的数据包(XML)并将其作为"[actionsAllowed]"返回。

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

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

然后迭代NodeList并将每个添加到数组中。

最后,它将数组作为"[ActionOne, ActionTwo, ActionThree]"返回,这太棒了!

但是 - 这就是问题所在:

变量"actionArray"变为"Object[actionsAllowed]",而不是数组。

知道为什么会这样吗?我有一个理论,但我无法解决它=(

谢谢!

2 个答案:

答案 0 :(得分: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);
    }
});    

答案 1 :(得分:1)

这是另一种选择:

var actionArray = $('actionsAllowed > *').map(function (el) { 
    return el.nodeName; 
}).get();