NodeFilter - 用于过滤 NodeIterator 或 TreeWalker 中的节点的对象

NodeFilter 接口代表用于过滤 NodeIteratorTreeWalker 中的节点的对象。他们对 DOM 或如何遍历节点一无所知。他们只知道如何根据提供的过滤器评估单个节点。

浏览器不提供任何实现此接口的对象。而是期望用户编写一个,针对其需求定制 acceptNode() 方法,并将其与某些 TreeWalkerNodeIterator 对象一起使用。

属性

该接口既不实现也不继承任何属性。

方法

该接口不继承任何方法。

NodeFilter.acceptNode()

返回一个 unsigned short ,用来告诉 NodeIteratorTreeWalker 迭代算法是否必须接受给定的 Node。该方法应由 NodeFilter 的用户编写。可能的返回值是:

FILTER_ACCEPT

NodeFilter.acceptNode() 方法返回的值,表示节点应该被接受。

FILTER_REJECT

NodeFilter.acceptNode() 方法返回的值,表示节点应该被拒绝。对于 TreeWalker,子节点也将被拒绝。对于 NodeIterator,此标志与 FILTER_SKIP 同义。

FILTER_SKIP

NodeFilter.acceptNode() 方法返回的值,表示 NodeIteratorTreeWalker 对象要跳过的节点。跳过的节点的子节点仍然会被处理。它是 “跳过此节点,但不跳过其子节点”。

实例

var nodeIterator = document.createNodeIterator(
  // 作为根节点
  document.getElementById('someId'),

  // 只考虑属于文本节点的节点(nodeType 3)
  NodeFilter.SHOW_TEXT,

  // 包含要用于 NodeFilter 的 acceptNode 方法的函数的对象
    { acceptNode: function(node) {
      // 决定是否接受,拒绝或跳过节点的逻辑
      // 在这个例子,仅接受具有非空格内容的节点
      if ( ! /^\s*$/.test(node.data) ) {
        return NodeFilter.FILTER_ACCEPT;
      }
    }
  },
  false
);

// 显示作为 root 子节点的每个非空文本节点的内容
var node;

while ((node = nodeIterator.nextNode())) {
  alert(node.data);
}

规范

规范 状态 备注
DOM
NodeFilter 的定义
现行的标准 -
Document Object Model (DOM) Level 2 Traversal and Range Specification
NodeFilter 的定义
已过时 初始定义。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
feature_basicsupport1 支持2993
acceptNode1122993

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
feature_basicsupport 支持 支持 未知4 未知10.13
acceptNode 支持 支持 未知4 未知10.13

相关链接