dom树的广度优先遍历
2019-04-09 本文已影响0人
千茉紫依
有时候对dom树要逐层进行处理,这时就要用到广度优先遍历。思路是对所有的父节点进行遍历,将他们的子节点全部保存进一个数组当中,对数组处理完毕后,递归调用数组。
例如要找出每层子节点最多的节点返回,可以这样写:
const findMostCount = dom => {
let r = [];
const find = domArr => {
let children = [];
let most = 0;
domArr.forEach((item, idx) => {
if (item.childElementCount > most)
most = item.childElementCount;
children.push(...item.children);
});
r.push(most);
if (children.length) find(children);
};
find([dom]);
return r;
};
将每一层看做一个数组,然后逐层进行遍历,将children取出保存,同时取出子节点数最多的节点,当子节点数组不为空时,递归调用。