我有一个未知的、复杂的DOM结构,并且正在寻找具有给定类(.bar)的最大嵌套元素数量。
我需要一个(递归)方法,它返回嵌套元素的最大层数。在这个例子中,应该是3。
所以我的方法是使用
这种方法在我看来显得很繁琐且资源消耗大,所以我正在寻找更好的解决方案。而且,如果元素被移除,计数会发生变化,但
我需要一个(递归)方法,它返回嵌套元素的最大层数。在这个例子中,应该是3。
<div class="root">
<div class="foo"></div>
<div class="foo">
<div class="bar"> <!-- #1 -->
<div class="foo"></div>
<div class="foo"></div>
</div>
</div>
<div class="foo"></div>
<div class="foo">
<div class="bar"> <!-- #1 -->
<div class="foo"></div>
<div class="foo"></div>
<div class="foo">
<div class="bar"> <!-- #2 -->
<div class="foo"></div>
<div class="foo"></div>
<div class="foo">
<div class="bar"> <!-- #3 --> <!-- << this is the "most nested element" -->
<div class="foo"></div>
<div class="foo"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="foo"></div>
<div class="foo">
<div class="bar"> <!-- #1 -->
<div class="foo"></div>
<div class="foo"></div>
<div class="foo"></div>
</div>
</div>
<div class="bar"> <!-- #1 -->
<div class="foo"></div>
<div class="foo"></div>
<div class="foo">
<div class="bar"> <!-- #2 -->
<div class="foo"></div>
<div class="foo"></div>
<div class="foo"></div>
</div>
</div>
</div>
</div>
所以我的方法是使用
querySelectorAll('.bar')
:let d = 0;
function my_counter(root, depth = 0) {
//get all items
let items = root.querySelectorAll('.bar');
d = Math.max(d, depth);
//for each item check
items.forEach((item) => {
my_counter(item, depth + 1);
});
return d;
}
这种方法在我看来显得很繁琐且资源消耗大,所以我正在寻找更好的解决方案。而且,如果元素被移除,计数会发生变化,但
Math.max
并不考虑这一点。