javascript从所有深度获取dom元素子元素

javascript从所有深度获取dom元素子元素,javascript,html,dom,Javascript,Html,Dom,我有如下HTML代码: <div id="test"> <div id="test1"> <div id="test2"> test </div> </div> </div> 测试 我想获取元素“test”的所有子元素,因此我创建了一个递归函数: function getObjectChildren(elem) { var elemChil

我有如下HTML代码:

<div id="test">
    <div id="test1">
        <div id="test2">
            test
        </div>
    </div>
</div>

测试
我想获取元素“test”的所有子元素,因此我创建了一个递归函数:

function getObjectChildren(elem) {
    var elemChildren = elem.childNodes;
    var result = [];
    result.push.apply(elemChildren);
    for (k = 0; k < elemChildren.length; k++) {
        if (elemChildren[k].childNodes.length > 0) {
            result.push.apply(getObjectChildren(elemChildren[k]));
        }
    }
    return result;
}

var a = getObjectChildren(document.getElementById("test");
函数getObjectChildren(elem){ var elemChildren=elem.childNodes; var结果=[]; 结果.推送.应用(电子儿童); 对于(k=0;k0){ result.push.apply(getObjectChildren(elemChildren[k]); } } 返回结果; } var a=getObjectChildren(document.getElementById(“test”); 问题是,这个递归函数进入了一个无限循环。有人知道为什么会发生这种情况,以及我如何解决这个问题吗?

我解决了我的问题:

function getObjectChildren(elem) {
    var elemChildren = elem.childNodes;
    var result = [];
    for (var k = 0; k < elemChildren.length; k++) {
        result.push(elemChildren[k]);
        if (elemChildren[k].childNodes.length > 0) {
            var tmp = getObjectChildren(elemChildren[k]);
            for (var i = 0; i < tmp.length; i++) {
                result.push(tmp[i]);
            }
        }
    }
    return result;
}
函数getObjectChildren(elem){ var elemChildren=elem.childNodes; var结果=[]; for(变量k=0;k0){ var tmp=getObjectChildren(elemChildren[k]); 对于(变量i=0;i小心全局
k
变量。检查:
result.push.apply(result,getObjectChildren(elemChildren[k]);