从对象变量获取子节点

时间:2013-11-11 16:16:23

标签: javascript jquery list nodes children

我的代码遇到了一个小麻烦 - 下面是我的代码:

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

这在firebug控制台中返回以下内容:

对象[actionsAllowed]

点击“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()}

所以在NodeList下我看到了正确的动作。

我遇到的问题是我不知道如何将这些行动从那里取出并列出,甚至只是将它们作为单独的变量提供。

我尝试记录每个孩子:

function getActionsAllowed() {
    var children = actionsAllowed.childNodes;
        for (var i = 0; i < children.length; i++) {
            console.log(children);
        }
}

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

还有另一个更好的方法吗?或者这是正确的,但我犯了一个错误?

谢谢。

亲切的问候,

Gary Shergill

编辑:

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

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()更改为更有用的东西(需要单独定义每个...)。

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

(我的相关帖子:Returning Arrays and ChildNodes

1 个答案:

答案 0 :(得分:1)

您始终可以使用toArrayget从jQuery对象中提取DOM节点。

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

但这通常没有必要,因为jQuery对象本身实现了一个广泛的API来操作节点。

E.g。循环节点

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