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
。