从对象变量中获取子节点

Getting th ChildNodes from an object variable

本文关键字:获取 子节点 变量 对象      更新时间:2023-09-26

我的代码遇到了一个小障碍 - 下面是我的代码:

var actionsAllowed = $(packet).find('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);
        }
}

问题是,".childNodes"一直以"未定义"的形式返回。

有没有另一种更好的方法可以做到这一点?或者这是正确的,但我犯了一个错误?

谢谢。

亲切问候

加里·谢吉尔

编辑:

只有一个结果的工作代码:

var currentState = $(packet).find('currentState').text();
var actionsBanned = $(packet).find('actionsBanned').text();

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

这行得通=)它逐个记录每个操作,因此它正在工作。只需选择如何将 console.log() 更改为更有用的内容(需要单独定义每个......

如果我遇到问题,将创建一个新线程并从此处链接它。

(我的相关线程:返回数组和子节点)

你总是可以使用 toArrayget 从 jQuery 对象中提取 DOM 节点。

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

但这通常不是必需的,因为 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());
});