cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Lintas nod dom, tukarkannya kepada tatasusunan, dan susun yang lebih dalam ke hadapan Bagaimana untuk mencapainya?

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

高洛峰高洛峰2712 hari yang lalu767

membalas semua(1)saya akan balas

  • 仅有的幸福

    仅有的幸福2017-06-26 10:53:49

    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
    }

    balas
    0
  • Batalbalas