我有以下代码:
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]"
,而不是数组。
知道为什么会这样吗?我有一个理论,但我无法解决它=(
谢谢!
答案 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();