2019-01-09

遍历

"DOM2级遍历和范围"模块定义了两个用于辅助完成顺序遍历DOM结构的类型:NodeIterator和TreeWalker。这两个类型能够基于给定的起点对DOM结构执行深度优先的遍历操作。

任何节点都可以作为遍历的根节点。
假设 body 元素为根节点,那么遍历的第一步就是访问 p 元素,然后再访问同为 body 元素后台的两个文本节点。
不过,这次遍历永远不会到达 html 、head元素,也不会到达不属于 body 元素子树的任何节点。而以document为根节点的遍历则可以访问到文档中的全部节点。

image.png

12.3.1 NodeIteratoe

使用document.createNodeIteratoe( )方法创建它的新实例、这个方法接受下列4个参数:
◆ root:想要作为搜索七点的树中的节点
◆ whatToShow:表示要访问哪些节点的数字代码
◆ filter:是一个NodeFilter对象,或者一个表示应该接受还是拒绝某种特定节点的函数。
◆ entityReferenceExpansion:布尔值,表示是否要扩展实体引用。这个参数在HTML页面中没有用,因为其中的实体引用不能扩展。

12.3.2 TreeWalker

TreeWalker是NodeIterator的一个更高级的版本。除了包括nextNode()和previousNode()在内的相同的功能之外,这个类型还提供了下列用于在不同方向上遍历DOM结构的方法:
◆ parentNode():遍历到当前节点的父节点;
◆ firstChild():遍历到当前节点的第一个子节点。
◆ lastChild():遍历到当前节点的最后一个子节点;
◆ nextSibling():遍历到当前节点的下一个同辈节点;
◆ previousSibling():遍历到当前节点的上一个同辈节点。

创建TreeWalker对象要使用document.createTreeWalker()方法,这个方法接受的4个参数与document.createNodeIterator( )方法相同:
1、作为遍历起点的根节点
2、要显示的节点类型
3、过滤器
4、一个表示是否扩展实体引用的布尔值
由于这两个创建方法很相似,所以很容易用TreeWalker来代替NodeIterator

TreeWalker真正强大的地方在于能够在DOM结构中沿任何方向移动。使用TreeWalker遍历DOM树,即使不定义过滤器,也可以取得所有

  • 元素。

    var div = document.getElementById("div1");
    var walker = document.createTreeWalker(div,NodeFilter.SHOW_ELEMENT,null,false);
    
    walker.firstChild( );//转到

    walker.nextChild( );//转到

      var node = walker.firstChild( ); //转到第一个
    • while (node !== null){ alert(node.tagName); node = walker.nextSibling; }

    TreeWalker类型还有一个属性,名叫currentNode,表示任何遍历方法在上一次遍历中返回的节点。
    与NodeIterator相比,TreeWalker类型在遍历DOM时拥有更大的灵活性。

  • 你可能感兴趣的:(2019-01-09)