如何遍历DOM以确定最大嵌套深度?

时间:2013-08-21 17:22:14

标签: javascript html dom

例如:

// ...
<body>
  <div>
    <div>
    </div>
  </div>
</body>
// ...

这个巢深度是3?但更一般地说,我如何遍历DOM以查找此信息?

我有兴趣将DOM视为一个n-ary树,将其建模为对象文字,如本文所述:

n-ary tree in JavaScript

4 个答案:

答案 0 :(得分:6)

优雅的递归解决方案

将此功能用作 - height(document.body)

function height(el) {
    if (!el.children)
        return 0;
    var max = -1;
    for ( var i = 0; i < el.children.length; i++) {
        var h = height(el.children[i]);
        if (h > max) {
            max = h;
        }
    }
    return max + 1;
}

答案 1 :(得分:3)

function getMaximumDepth (element) {
    var child = element.firstChild;
    var childrenDepth = [];

    if ( ! child ) {
        return 1;
    }

    while (child) {
        childrenDepth.push( getMaximumDepth(child) );
        child = child.nextSibling;
    }

    return Math.max.apply(Math, childrenDepth) + 1;
}

演示:http://jsfiddle.net/53R2p/

答案 2 :(得分:2)

如果唯一目标是确定最大嵌套级别,我会考虑使用querySelector(因为它应该经过优化):

function getMaxNestLevel() {
    var i = 1, sel = '* > *'; /* html > body is always present */
    while(document.querySelector(sel)) {
        sel += ' > *';
        i++;
    }
    return i;
}

Example(与此SO页面标记的一部分)

答案 3 :(得分:1)

我个人最喜欢的是使用堆栈。您不断推送标签,直到找到相应的/对称的结束标签。然后你可以弹出或做你想做的任何分析。这是Comp Sci Data Structures类的经典示例。