美文网首页Web前端之路
遍历整个 DOM 树并打印名称

遍历整个 DOM 树并打印名称

作者: 老邵 | 来源:发表于2019-05-24 12:25 被阅读0次

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

相关文章

  • 遍历整个 DOM 树并打印名称

    1. 遍历 DOM 树并打印节点类型及名称 2. 遍历 DOM 树并打印所有元素的 tagName 在这段代码中,...

  • 面试题:DOM树遍历

    问题:遍历DOM树并打印出DOM节点的tagName和className 思路: 首先我们不确定当前dom下有多少...

  • jQuery 遍历DOM元素的总结

    向上遍历的DOM树(祖先) parent() parents() parentsUntil() 向下遍历DOM树(...

  • 2020-04-01-Java操作xml文档

    DOM树 DOM4j 将整个xml视为document对象xml标签被视为element对象 Dom4j遍历xml...

  • 遍历

    向上遍历 DOM 树 这些 jQuery 方法很有用,它们用于向上遍历 DOM 树:parent()parents...

  • JQuery遍历

    向上遍历 DOM 树 这些 jQuery 方法很有用,它们用于向上遍历 DOM 树: parent() 返回被选元...

  • jsoup:遍历一棵树

    深度优先遍历 dom 树

  • jQuery 遍历|后代

    后代是子、孙、曾孙等等。 通过 jQuery,您能够向下遍历 DOM 树,以查找元素的后代。 向下遍历 DOM 树...

  • 要成功就做一百题-98

    题目名称 二叉树的中序遍历 描述 给定一个先序遍历的二叉树,打印出其中序(中根)遍历的结构。 解题思路 首先是根据...

  • jQuery 遍历|同胞(siblings)

    同胞拥有相同的父元素。 通过 jQuery,您能够在 DOM 树中遍历元素的同胞元素。 在 DOM 树中水平遍历 ...

网友评论

    本文标题:遍历整个 DOM 树并打印名称

    本文链接:https://www.haomeiwen.com/subject/vdsxzqtx.html