NodeFilter

NodeFilter 接口表示一个对象,此对象用于过滤 NodeIteratorTreeWalker 中的节点。它既不能处理 DOM,也不能遍历节点;它只能根据提供的过滤器对单个节点进行判定。

注意:浏览器不提供任何实现该接口的对象。用户需要自己编写该对象,根据需要自行定制 acceptNode() 方法,以用于TreeWalkerNodeIterator 对象。

属性

此接口没有实现或继承任何属性。

方法

此接口不继承任何方法。

NodeFilter.acceptNode()
返回一个 unsigned short,用于表示提供的Node 是否需要被NodeIteratorTreeWalker 迭代算法所接受。这个方法应由使用 NodeFilter 的用户编写。可能的值如下:
常量 描述
FILTER_ACCEPT 当需要接受一个节点时,NodeFilter.acceptNode()返回该值。
FILTER_REJECT 当需要拒绝一个节点时,NodeFilter.acceptNode()返回该值。对于 TreeWalker,这个节点的子节点也会被拒绝。对于 NodeIterator,这个常量的表现与FILTER_SKIP一样。
FILTER_SKIP NodeIteratorTreeWalker 对象需要跳过一个节点时,NodeFilter.acceptNode()返回该值。但被跳过节点的子节点仍会被考虑,意即“跳过该节点但不包括其子节点”。

示例

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

  // 只筛选文本节点(即节点类型3)
  NodeFilter.SHOW_TEXT,

  // 用作 NodeFilter 的对象,其中包含 acceptNode 方法
    { acceptNode: function(node) {
      // 接受、拒绝或跳过的逻辑
      // 下述例子只接受除了空格以外的内容
      if ( ! /^\s*$/.test(node.data) ) {
        return NodeFilter.FILTER_ACCEPT;
      }
    }
  },
  false
);

// 显示根节点下每个非空的文本节点
var node;

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

规范

规范 状态 备注
DOM
NodeFilter
Living Standard
Document Object Model (DOM) Level 2 Traversal and Range Specification
NodeFilter
Obsolete Initial definition.

浏览器兼容性

Update compatibility data on GitHub
DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung Internet
NodeFilterChrome Full support 1Edge Full support 12Firefox Full support 2IE Full support 9Opera Full support 9Safari Full support 3WebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 3Samsung Internet Android Full support Yes
acceptNodeChrome Full support 1Edge Full support 12Firefox Full support 2IE Full support 9Opera Full support 9Safari Full support 3WebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 3Samsung Internet Android Full support Yes

Legend

Full support  
Full support

参见