例えば:
// ...
<body>
<div>
<div>
</div>
</div>
</body>
// ...
この入れ子の深さは 3? しかし、より一般的には、DOM をトラバースしてこの情報を見つけるにはどうすればよいでしょうか?
この投稿で説明されているように、オブジェクト リテラルとしてモデル化された n-ary ツリーのように DOM を扱うことに興味があります。
例えば:
// ...
<body>
<div>
<div>
</div>
</div>
</body>
// ...
この入れ子の深さは 3? しかし、より一般的には、DOM をトラバースしてこの情報を見つけるにはどうすればよいでしょうか?
この投稿で説明されているように、オブジェクト リテラルとしてモデル化された n-ary ツリーのように DOM を扱うことに興味があります。
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;
}
唯一の目標が最大ネスト レベルを決定することである場合は、次の使用を検討しquerySelector
ます (適切に最適化する必要があるため)。
function getMaxNestLevel() {
var i = 1, sel = '* > *'; /* html > body is always present */
while(document.querySelector(sel)) {
sel += ' > *';
i++;
}
return i;
}
例(この SO ページ マークアップの一部を使用)