题目:
请写一个function,以数组形式返回整HTML树的所有标签名称(需去重),返回值示例:['div','span','p',...]
第一次看到题目时,感觉不难,但是思路很乱,无从下手
分析
难点在于如何获取html文档内的所有标签,因为标签可以相互嵌套,需要用到递归
- 获取文档的根部元素,得到html标签
- 获取html元素的子元素,遍历子元素,得到第二层标签
- 获取html子元素的子元素,并去遍历他们,得到第三层标签
- 以此类推,层层深入
下面使用代码实现
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))完成这道题大概花了一个小时,看来自己的基础知识还是不够扎实