如何用原生js求DOM树的最大深度?
function getMaxDomTreeDepth_recursive(domRoot) {
var childrenDepth = [],
child = domRoot.firstChild;
if (!child) {
return 1;
}
while (child) {
childrenDepth.push(getMaxDomTreeDepth_recursive(child));
child = child.nextSibling;
}
console.log(childrenDepth)
return Math.max(...childrenDepth) + 1;
}
我利用了 dom 节点的 children 属性 来遍历和递归
递归套路是: 返回 (1 + 子节点们深度的最大值)
// map(e => e + 1)([0, 1, 2])
// => 1, 2, 3
// 类似于数组的map方法 不过这里柯里化了
var map = cb => arr => Array.prototype.map.call(arr, cb);
// 取数组最大值
// max([0, 1, 2])
// => 2
var max = arr => arr.reduce((acc, cur) => {
if (cur >= acc) return cur;
else return acc;
}, arr[0]);
// 递归函数
var nextChildren = node => {
// 基准条件
if (node.children.length === 0) return 1;
else {
// 求子节点们的长度 并取最大值
var deeps = map(nextChildren)(node.children);
return 1 + max(deeps);
}
}
// 计算
var $body = document.getElementsByTagName('body')[0];
var deep = nextChildren($body);
console.log(deep);
13 回答12.9k 阅读
7 回答2k 阅读
3 回答1.2k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答942 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决