遍历整个 DOM 树并打印名称
来源:牛鼻子老邵     阅读:660
源码超市
发布于 2019-06-11 05:40
查看主页

1. 遍历 DOM 树并打印节点类型及名称

function consoAllNodeName(parentNode) {    let nodeType = '';    parentNode.childNodes.forEach(element => {        switch (element.nodeType) {            case 1:                nodeType = 'Element node:';                break;            case 3:                nodeType = 'Text node:';                break;            case 7:                nodeType = 'XML ProcessingInstruction:';                break;            case 8:                nodeType = 'Comment node:';                break;            case 9:                nodeType = 'Document node:';                break;            case 10:                nodeType = 'DocumentType node:';                break;            case 11:                nodeType = 'DocumentFragment node:';                break;            default:                nodeType = 'Unknown type node:';                break;        }        console.log(nodeType + element.nodeName.toUpperCase());        if (element.firstChild) {            consoAllNodeName(element);        } else {        }    })}consoAllNodeName(document);

2. 遍历 DOM 树并打印所有元素的 tagName

function consoAllTagName(parentNode) {    let nodeType = '';    let childNodes = Array.prototype.filter.call(parentNode.childNodes, element => element.tagName);    childNodes.forEach(element => {                 console.log(element.tagName.toUpperCase());        if (element.firstChild) {            consoAllNodeName(element);        } else {        }    })}consoAllTagName(document);

在这段代码中,因为 nodeList 类型并没有 filter 方法,使用 call 函数传入 nodelist 调用该方法。并且将 filter 的解决函数作为第二个参数。

下面这种方法是广度优先遍历。

function consoAllTagName(root){  const queue = [root];  while(queue.length) {    const currentNode = queue.shift();    const {childNodes, tagName} = currentNode;    if (tagName) {      console.log(currentNode.tagName);    } else {    }    Array.prototype.filter.call(childNodes, item=>item.tagName)    .forEach(itemNode=>{      queue.push(itemNode)    })  }}

这段代码中,通过解构赋值得到 childNodes 和 tageName 属性。

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
如何在 Linux 中一次重命名多个文件
从BAT大数据工程师那里总结的大数据学习方法
bind方法的实现及原理
《JS原理、方法与实践》- Javascript简介
dropload.js(上拉加载插件)使用实例
首页
搜索
订单
购物车
我的