javascript - Dom-Knoten durchqueren, in ein Array umwandeln und die tieferen Knoten nach vorne sortieren?
高洛峰2017-06-26 10:51:49
0
1
774
Wie der Titel schon sagt, beginnen Sie mit einem Knoten und durchlaufen Sie ihn nach unten, bis alle Knoten vorne durchlaufen sind, und konvertieren Sie diese Knoten in ein Array.
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
}
递归遍历孩子,按底向上、左到右顺序
补:按底向上、左到右顺序并不一定是层次最深的排前面。可以用层序遍历倒过来记录: