JavaScript

JavaScript 知识量:26 - 101 - 483

15.3 遍历><

NodeIterator- 15.3.1 -

NodeIterator是一个接口,它用于遍历DOM树中的节点。在DOM树中,节点可以是元素节点,也可以是文本节点或者注释节点等。NodeIterator提供了一种方法,可以按照特定的顺序遍历DOM树中的节点。

NodeIterator接口定义了一些方法,包括:

  • nextNode(): 返回下一个节点,如果已经到达了DOM树的末端,则返回null。

  • previousNode(): 返回上一个节点,如果已经到达了DOM树的起点,则返回null。

  • parentNode: 返回当前节点所在的父节点。

在使用NodeIterator遍历DOM树时,需要注意以下几点:

  • NodeIterator是只读的,不能修改DOM树。

  • NodeIterator可以设置深度,例如只遍历到某个特定的节点为止。

  • NodeIterator可以设置节点类型,例如只遍历元素节点或者文本节点。

在JavaScript中,可以使用Document对象的createNodeIterator()方法创建一个NodeIterator对象。例如:

var nodeIterator = document.createNodeIterator(  
    document.body,  
    NodeFilter.SHOW_ELEMENT,  
    null,  
    false  
);

以上代码创建了一个NodeIterator对象,该对象从document的body节点开始遍历,只遍历元素节点,并且不使用任何过滤器。

以下是一个使用NodeIterator遍历DOM树的示例:

// 导入DOM模块  
const DOMParser = require('xmldom').DOMParser;  
  
// 创建一个XML文档  
const xml = `  
    <root>  
        <element1>Text1</element1>  
        <element2 attribute1="value1">Text2</element2>  
        <element3 attribute2="value2">Text3</element3>  
    </root>  
`;  
  
// 解析XML文档  
const parser = new DOMParser();  
const doc = parser.parseFromString(xml, 'text/xml');  
  
// 创建NodeIterator对象  
const nodeIterator = doc.createNodeIterator(  
    doc.documentElement,  
    NodeFilter.SHOW_ELEMENT,  
    null,  
    false  
);  
  
// 遍历DOM树  
let node;  
while (node = nodeIterator.nextNode()) {  
    console.log(`Node name: ${node.nodeName}, Node type: ${node.nodeType}`);  
}

以上示例中,首先使用xmldom模块创建了一个DOMParser对象,并使用它将XML字符串解析成一个DOM文档对象。然后,使用createNodeIterator()方法创建了一个NodeIterator对象,该对象从根节点开始遍历DOM树。在while循环中,使用nextNode()方法遍历DOM树,并输出每个节点的名称和类型。

TreeWalker- 15.3.2 -

TreeWalker是一个用于遍历DOM树的接口。它提供了一种方法,可以按照特定的顺序遍历DOM树中的节点。

TreeWalker接口定义了一些方法,包括:

  • parentNode: 返回当前节点所在的父节点。

  • firstChild(): 返回当前节点的第一个子节点,如果没有则返回null。

  • lastChild(): 返回当前节点的最后一个子节点,如果没有则返回null。

  • nextSibling(): 返回当前节点的下一个兄弟节点,如果没有则返回null。

  • previousSibling(): 返回当前节点的上一个兄弟节点,如果没有则返回null。

  • parentNode: 返回重新父节点。

TreeWalker还可以使用filter进行过滤,例如只遍历特定的节点类型。在JavaScript中,可以使用Document对象的createTreeWalker()方法创建一个TreeWalker对象。例如:

var treeWalker = document.createTreeWalker(  
    document.body,  
    NodeFilter.SHOW_ELEMENT,  
    null,  
    false  
);

以上代码创建了一个TreeWalker对象,该对象从document的body节点开始遍历,只遍历元素节点,并且不使用任何过滤器。

以下是一个使用TreeWalker遍历DOM的示例:

// 创建一个DOM文档  
const xml = `  
    <root>  
        <element1>Text1</element1>  
        <element2 attribute1="value1">Text2</element2>  
        <element3 attribute2="value2">Text3</element3>  
    </root>  
`;  
  
// 解析XML文档  
const parser = new DOMParser();  
const doc = parser.parseFromString(xml, 'text/xml');  
  
// 创建TreeWalker对象  
const treeWalker = doc.createTreeWalker(  
    doc.documentElement,  
    NodeFilter.SHOW_ELEMENT,  
    null,  
    false  
);  
  
// 遍历DOM树  
let node;  
while (node = treeWalker.nextNode()) {  
    console.log(`Node name: ${node.nodeName}, Node type: ${node.nodeType}`);  
}

在这个示例中,首先使用DOMParser对象将XML字符串解析成一个DOM文档对象。然后,使用createTreeWalker()方法创建一个TreeWalker对象,该对象从根节点开始遍历DOM树。在while循环中,使用nextNode()方法遍历DOM树,并输出每个节点的名称和类型。在这个示例中,只输出了节点的名称和类型,可以根据需要访问和操作其他属性。