NodeFilter - 用于过滤 NodeIterator 或 TreeWalker 中的节点的对象
NodeFilter 接口代表用于过滤 NodeIterator 或 TreeWalker 中的节点的对象。他们对 DOM 或如何遍历节点一无所知。他们只知道如何根据提供的过滤器评估单个节点。
浏览器不提供任何实现此接口的对象。而是期望用户编写一个,针对其需求定制
acceptNode()方法,并将其与某些TreeWalker或NodeIterator对象一起使用。
属性
该接口既不实现也不继承任何属性。
方法
该接口不继承任何方法。
NodeFilter.acceptNode()
返回一个 unsigned short ,用来告诉 NodeIterator 或 TreeWalker 迭代算法是否必须接受给定的 Node。该方法应由 NodeFilter 的用户编写。可能的返回值是:
FILTER_ACCEPT
由 NodeFilter.acceptNode() 方法返回的值,表示节点应该被接受。
FILTER_REJECT
由 NodeFilter.acceptNode() 方法返回的值,表示节点应该被拒绝。对于 TreeWalker,子节点也将被拒绝。对于 NodeIterator,此标志与 FILTER_SKIP 同义。
FILTER_SKIP
由 NodeFilter.acceptNode() 方法返回的值,表示 NodeIterator 或 TreeWalker 对象要跳过的节点。跳过的节点的子节点仍然会被处理。它是 “跳过此节点,但不跳过其子节点”。
实例
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 的定义 |
已过时 | 初始定义。 |
桌面浏览器兼容性
| 特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| feature_basicsupport | 1 | 支持 | 2 | 9 | 9 | 3 |
acceptNode | 1 | 12 | 2 | 9 | 9 | 3 |
移动浏览器兼容性
| 特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
|---|---|---|---|---|---|---|---|
| feature_basicsupport | 支持 | 支持 | 未知 | 4 | 未知 | 10.1 | 3 |
acceptNode | 支持 | 支持 | 未知 | 4 | 未知 | 10.1 | 3 |
相关链接
- 相关接口:
TreeWalker,NodeIterator。