javascript - 遍歷dom節點,將其轉換為數組,並且將層次越深的排在越前面,怎麼實現?
高洛峰
高洛峰 2017-06-26 10:51:49
0
1
696

如題,從一個node節點開始向下遍歷,直到遍歷完所有節點,將層次最深的節點排在最前面,將這些節點轉換為一個數組,如何實現?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆 (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 }
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!