猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
遍历dom节点,将其转换为一个数组,并且将层次越深的排在越前面,怎么实现?
如题,从一个node节点开始向下遍历,直至遍历完所有节点,将层次最深的节点排在最前面,将这些节点转换为一个数组,如何实现?
幕布斯7119047
浏览 561
回答 1
1回答
呼如林
递归遍历孩子,按底向上、左到右顺序function listNode (node) { if (!(node instanceof Node)) { throw new TypeError("parameter 1 is not of type 'Node'") } return Array.from(node.childNodes || []) .reduce((cList, cNode) => cList.concat(listNode(cNode)), []) .concat([node])}补:按底向上、左到右顺序并不一定是层次最深的排前面。可以用层序遍历倒过来记录:function listNode (rootNode) { if (!(rootNode instanceof Node)) { throw new TypeError("parameter 1 is not of type 'Node'") } var queue = [rootNode, null] var levelNodes = [] var result = [] while (queue.length > 1) { var node = queue.shift() if (node === null) { queue.push(null) result = levelNodes.concat(result) levelNodes = [] continue } levelNodes.push(node) if (node.hasChildNodes()) { queue = queue.concat(Array.from(node.childNodes)) } } if (levelNodes.length > 0) { result = levelNodes.concat(result) } return result}
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
JavaScript
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续