Javascript 从对象变量获取子节点
我的代码遇到了一个小问题-下面是我的代码:Javascript 从对象变量获取子节点,javascript,jquery,list,nodes,children,Javascript,Jquery,List,Nodes,Children,我的代码遇到了一个小问题-下面是我的代码: var actionsAllowed = $(packet).find('actionsAllowed'); 这会在firebug控制台中返回以下内容: 对象[已删除的操作] 单击“actionsAllowed”将我带进数据包并转到正确的部分,在那里我看到了列出的两个操作 我可以展开对象并最终看到以下内容: Object[actions] 0 actions remove remove() attributes []
var actionsAllowed = $(packet).find('actionsAllowed');
这会在firebug控制台中返回以下内容:
对象[已删除的操作]
单击“actionsAllowed”将我带进数据包并转到正确的部分,在那里我看到了列出的两个操作
我可以展开对象并最终看到以下内容:
Object[actions]
0
actions
remove
remove()
attributes
[]
baseURI
"http://localhost:9000/testget#"
childElementCount
2
childNodes
NodeList[ActionOne, ActionTwo]
0
ActionOne
1
ActionTwo
length
2
item
item()
iterator
iterator()
__proto__
NodeListPrototype { item=item(), iterator=iterator()}
因此,在节点列表下,我看到了正确的操作
我遇到的问题是,我不知道如何将这些操作从那里取出并列出,甚至不知道如何将它们作为单独的变量使用
我尝试获取并记录每个孩子:
function getActionsAllowed() {
var children = actionsAllowed.childNodes;
for (var i = 0; i < children.length; i++) {
console.log(children);
}
}
编辑2:
更新代码至:
$(packet).find('actionsAllowed').each(function () {
var children = this.childNodes;
for (var i = 0; i < children.length; i++) {
var action = children[i].nodeName
console.log(action);
}
});
$(数据包).find('actionsAllowed').each(函数(){
var children=this.childNodes;
对于(变量i=0;i
它一个接一个地记录每个动作,因此它工作正常。只需选择如何将console.log()更改为更有用的内容(需要分别定义每一个…)
将创建一个新的线程,如果我有麻烦,并从这里链接它
(我的相关线程:)您始终可以使用或从jQuery对象提取DOM节点 但这通常不是必需的,因为jQuery对象本身实现了一个扩展API来操作节点 例如,在节点上循环
$(packet).find('actionsAllowed').each(function () {
//looping over childnodes
$(this).children().each(function () {
console.log($(this).text());
});
});
如果您只想直接删除actionsAllowed节点的子节点,还可以执行以下操作:
$(packet).find('actionsAllowed > *').each(function () {
console.log($(this).text());
});
我怀疑他在解析XML,所以
actionsAllowed
可能是标记名,而不是类。@Barmar是的,这可能是正确的假设。我添加了一条评论,说如果我自己的假设是错误的,就忽略我的修改。您好,这是正确的,它是XML,actionsAllowed不是一个类。传入的XML有许多标记,其中大多数只是单个结果(例如var currentState=$(packet).find('currentState').text();),这些结果处理起来没有问题。@Gary我相应地修改了答案;)例如,您发送的行在节点上循环,将返回值从“Object[actionsAllowed]”更改为“actionsAllowed”,单击该行可将我转到我的XML。它可以列出动作吗?你能提供这样的对象吗?我已经粘贴了当我进入它时对象显示的内容。当然,这还不是全部,这是大量的行,但是显示了“actions”中的节点,这应该足够了?具有正确值的完整对象将使我们所有人都能够以比尝试尝试执行尝试/错误更快的速度为您提供答案。粘贴在此处太长了。。。将近2000个字符。1000个字符用于操作部分…jsbin/JSFIDLE用于相同的操作?
$(packet).find('actionsAllowed').each(function () {
//looping over childnodes
$(this).children().each(function () {
console.log($(this).text());
});
});
$(packet).find('actionsAllowed > *').each(function () {
console.log($(this).text());
});