試試這個
function getDescendants(node, n) {
    
    var descendants = [node];
    
    for(var i=0; i<n; i++)
    {
        var descendant = [];
        var childrenLength = 1;
        
        if(i !== 0) {
            childrenLength = descendants[i].length;
        }
        
        for(var j=0; j<childrenLength; j++)
        {
            var son;
            
            if(i === 0) {
                son = descendants[i].children;
            } else {
                son = descendants[i][j].children;
            }
            
            for(var k=0; k<son.length; k++)
            {
                descendant.push(son[k]);
            }
        }
        
        descendants[i+1] = descendant;
        
        if(descendants[i+1].length === 0) {
            return '此節點不存有第' + n + '代後代.';
        }
    }
    
    // return an Array
    return descendants[n];
}

解决方案 »

  1.   

    你也可以反着来啊 getElementsByTagName('*')
    循环看每个元素的第n个parentNode是否等于node  是的话push到一个数字里
      

  2.   

    无法编辑自己的回复是什么鬼……
    遍历的过程中记录层标记,把同一层的拿出来,不需要全部遍历,只找到第n层就好
    比较懒的话,广度优先把树保存起来,同时标记层起止位置,这样以后想要第几层直接从静态数组中拿就好,空间换时间ps楼上反向思维是个好方法,开销会不会有些大(哎?地上有块肥皂哎)