1

如何获取 DOM 节点相对于 HTML 元素的深度?(即 HTML 标签作为子节点,而不是文本节点)。

例如 :

<div> // root node
  here is my text node // but it wont be considered in level increment
   <p> // level 1
      <label>  // level 2
             here is another text node
      </label>
   </p>
</div>

这应该返回 2。

我已经尝试过了,但它不起作用:

function getDepth($node, $depth) {

foreach ($node->childNodes as $child):
    if($child->nodeType === 1):
        $depth++;
    endif;
    if ($node->childNodes):
        getDepth($child, $depth);
    endif;
endforeach;

return $depth;
}
4

2 回答 2

3

向上走树。这样的事情应该做(未经测试):

function getDepth($node)
{
    $depth = -1;

    // Increase depth until we reach the root (root has depth 0)
    while ($node != null)
    {
        $depth++;

        // Move to parent node
        $node = $node->parentNode;
    }

    return $depth;
}
于 2013-02-18T06:02:40.240 回答
0

我推荐这个:

function findNodeLevel($node) { // $node is a DOMNode 
    $xpath = explode('/', $node->getNodePath());
    return count($xpath);
}
于 2016-05-06T09:43:42.710 回答