题目描述

分别使用深度优先和广度优先来遍历输出以下 dom 结构的 tagName

<div id="root">
	<main>
		<header>
			<nav></nav>
			<div>
				<span></span>
				<span></span>
			</div>
		</header>
		<article>
			<h1></h1>
			<p></p>
			<h2></h2>
			<p></p>
			<h2></h2>
			<ul>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
			</ul>
		</article>
		<footer></footer>
	</main>
	<aside>
		<section>
			<ol>
				<li></li>
				<li></li>
				<li></li>
			</ol>
		</section>
		<p></p>
	</aside>
</div>

思路&js代码

1、深度优先遍历

function dfs(dom) {
  if (!dom.tagName) return
  console.log(dom.tagName)
  dom.childNodes.forEach(child => {
    test(child)
  })
}

2、广度优先遍历

function bfs(dom) {
  let arr = [dom]
 
  while (arr.length) {
    arr.forEach(item => console.log(item.tagName))
 
    const _tmp = []
    arr.forEach(item => {
      item.childNodes.forEach(child => {
        if (child.tagName) _tmp.push(child)
      })
    })
    arr = _tmp
  }
}