dom树的广度优先遍历

有时候对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取出保存,同时取出子节点数最多的节点,当子节点数组不为空时,递归调用。

你可能感兴趣的:(dom树的广度优先遍历)