javascript - Lintas nod dom, tukarkannya kepada tatasusunan, dan susun yang lebih dalam ke hadapan Bagaimana untuk mencapainya?
高洛峰
高洛峰 2017-06-26 10:51:49
0
1
779

Seperti tajuknya, mulakan dari nod dan turun ke bawah sehingga semua nod dilalui di hadapan dan tukarkan nod ini kepada tatasusunan.

高洛峰
高洛峰

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

membalas semua(1)
仅有的幸福

Lintas kanak-kanak secara rekursif, mengikut urutan dari bawah ke atas, kiri ke kanan

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])
}

Nota: Susunan dari bawah ke atas dan kiri ke kanan tidak semestinya yang paling dalam berada di hadapan. Anda boleh menggunakan traversal berjujukan lapisan untuk merakam secara terbalik:

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
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan