遍历整个 DOM 树并打印名称

作者 : 开心源码 本文共1335个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共197人阅读

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 属性。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 遍历整个 DOM 树并打印名称

发表回复