一道简单的面试题,我却卡住了

663 阅读1分钟

题目:

请写一个function,以数组形式返回整HTML树的所有标签名称(需去重),返回值示例:['div','span','p',...]

第一次看到题目时,感觉不难,但是思路很乱,无从下手


分析

难点在于如何获取html文档内的所有标签,因为标签可以相互嵌套,需要用到递归

  1. 获取文档的根部元素,得到html标签
  2. 获取html元素的子元素,遍历子元素,得到第二层标签
  3. 获取html子元素的子元素,并去遍历他们,得到第三层标签
  4. 以此类推,层层深入

下面使用代码实现

let doc=document.querySelector('html')let arr=[]function getTags(node){    //先把节点的nodeName保存到arr中    arr.push[node.nodeName]    let subTags=node.children    //判断是否有子节点,如果length>0则代表有子节点    if(subTags.length>0){        //[...subTags]把类数组对象装换成数组        [...subTags].forEach((child)=>{ //遍历每一个子节点            arr.push(child.nodeName) //把子节点的nodeName保存到arr中            getTags(child) //递归调用getTags        })     }     return [...new Set(arr)].map(//数组去重,并把大写字母变成小写         tag=>tag.toLowerCase()     )  }console.log(getTags(doc))


完成这道题大概花了一个小时,看来自己的基础知识还是不够扎实