1

HTML要素に関してDOMノードの深さを取得するにはどうすればよいですか? (これは、テキスト ノードではなく、子としての 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 に答える