JavaScript高级程序设计36.pdf
TreeWalker
TreeWalker是NodeIterator的更高级的版本,除了包括nextNode()和previousNode()在内的相同功能外,这个类型还提供了用于不同方向上遍历DOM结构的方法
parentNode():遍历到当前节点的父节点
firstChild():遍历到当前节点的第一个子节点
lastChild():遍历到当前节点的最后一个子节点
nextSibling():遍历到当前节点的下一个同胞节点
previoussibling():遍历到当前节点的上一个同胞节点
创建TreeWalker对象要使用document.createTreeWalker()方法,接收4个参数,与document.createNodeIterator()方法相同:作为遍历起点的根节点、要显示的节点类型、过滤器和一个表示是否扩展实体引用的布尔值,可以用document.createTreeWalker()方法代替document.createNodeIterator()方法
filter可以返回的值有所不同,除了NodeFilter.FILTER_ACCEPT和NodeFilter.FILTER_SKIP之外,还可以使用NodeFilter.FILTER_REJECT,在使用NodeIterator对象时,NodeFilter.FILTER_SKIP和NodeFilter.FILTER_REJECT作用相同就是跳过指定节点,在使用TreeWalker对象时NodeFilter.FILTER_SKIP会跳过子树的相应节点前往下一个节点,NodeFilter.FILTER_REJECT会跳过该节点包括其子树节点
TreeWalker可以在DOM结构中沿任何方向移动
...
walker.firstChild();
walker.nextSibling();
...
TreeWalker类型还有一个属性,currentNode,表示任何遍历方法在上一次遍历中返回的节点,通过设置这个属性可以修改遍历继续的起点
var node=walker.nextNode();
alert(node===walker.currentNode); //true
walker.currentNode=document.body; //修改起点
由于IE中没有对应的类型和方法,使用遍历的跨浏览器解决方案非常少见
范围
“DOM2级遍历和范围”模块定义了“范围”(range)接口。通过范围可以选择文档中一个区域,而不必考虑节点的界限,IE以专有方式实现了自己的范围特性
DOM中的范围
DOM2级在document类型中定义了createRange()方法,在兼容DOM的浏览器中,这个方法属于document对象,使用hasFeature()或者直接检测该方法,确定浏览器是否支持范围
var supportsRange=document.implementation.hasFeature("Range","2.0");
var alsoSupportsRange=(typeof document.createRange=="function");
创建DOM范围
var range=document.createRange();
每个范围由一个Range类型的实例表示,拥有很多的属性和方法
startContainer:包含范围起点的节点(即选区中第一个节点的父节点)
startOffset:范围在startContainer中起点的偏移量,如果startContainer是文本节点、注释节点或CDATA节点,那么startOffset就是范围起点之前跳过的字符数量。否则,startOffset就是范围中第一个子节点的索引
endContainer:包含范围终点的节点(即选区中最后一个节点的父节点)
endoffset:范围在endContainer中终点的偏移量(与startOffset遵循相同的取值规则)
commonAncestorContainer:startContainer和endContainer共同的祖先节点在文档树中位置最深的那个
在把范围放到文档中特定的位置时,这些属性都会被赋值
TreeWalker是NodeIterator的更高级的版本,除了包括nextNode()和previousNode()在内的相同功能外,这个类型还提供了用于不同方向上遍历DOM结构的方法
parentNode():遍历到当前节点的父节点
firstChild():遍历到当前节点的第一个子节点
lastChild():遍历到当前节点的最后一个子节点
nextSibling():遍历到当前节点的下一个同胞节点
previoussibling():遍历到当前节点的上一个同胞节点
创建TreeWalker对象要使用document.createTreeWalker()方法,接收4个参数,与document.createNodeIterator()方法相同:作为遍历起点的根节点、要显示的节点类型、过滤器和一个表示是否扩展实体引用的布尔值,可以用document.createTreeWalker()方法代替document.createNodeIterator()方法
filter可以返回的值有所不同,除了NodeFilter.FILTER_ACCEPT和NodeFilter.FILTER_SKIP之外,还可以使用NodeFilter.FILTER_REJECT,在使用NodeIterator对象时,NodeFilter.FILTER_SKIP和NodeFilter.FILTER_REJECT作用相同就是跳过指定节点,在使用TreeWalker对象时NodeFilter.FILTER_SKIP会跳过子树的相应节点前往下一个节点,NodeFilter.FILTER_REJECT会跳过该节点包括其子树节点
TreeWalker可以在DOM结构中沿任何方向移动
...
walker.firstChild();
walker.nextSibling();
...
TreeWalker类型还有一个属性,currentNode,表示任何遍历方法在上一次遍历中返回的节点,通过设置这个属性可以修改遍历继续的起点
var node=walker.nextNode();
alert(node===walker.currentNode); //true
walker.currentNode=document.body; //修改起点
由于IE中没有对应的类型和方法,使用遍历的跨浏览器解决方案非常少见
范围
“DOM2级遍历和范围”模块定义了“范围”(range)接口。通过范围可以选择文档中一个区域,而不必考虑节点的界限,IE以专有方式实现了自己的范围特性
DOM中的范围
DOM2级在document类型中定义了createRange()方法,在兼容DOM的浏览器中,这个方法属于document对象,使用hasFeature()或者直接检测该方法,确定浏览器是否支持范围
var supportsRange=document.implementation.hasFeature("Range","2.0");
var alsoSupportsRange=(typeof document.createRange=="function");
创建DOM范围
var range=document.createRange();
每个范围由一个Range类型的实例表示,拥有很多的属性和方法
startContainer:包含范围起点的节点(即选区中第一个节点的父节点)
startOffset:范围在startContainer中起点的偏移量,如果startContainer是文本节点、注释节点或CDATA节点,那么startOffset就是范围起点之前跳过的字符数量。否则,startOffset就是范围中第一个子节点的索引
endContainer:包含范围终点的节点(即选区中最后一个节点的父节点)
endoffset:范围在endContainer中终点的偏移量(与startOffset遵循相同的取值规则)
commonAncestorContainer:startContainer和endContainer共同的祖先节点在文档树中位置最深的那个
在把范围放到文档中特定的位置时,这些属性都会被赋值
【JavaScript高级程序设计36.pdf】相关文章
4. 使用 JavaScript 实现对 PDF 的全文索引
5. 2012年以来GitHub最流行的语言 JavaScript高居榜首
6. 原生体验挡不住!JavaScript开源跨平台框架NativeScript
7. JavaScript开源跨平台框架NativeScript
8. RapydScript:将特定代码转换成JavaScript的预编译器
9. JavaScript大师Nicholas C. Zakas谈TypeScript
10. CoffeeScript 已死,CoffeeScript 万岁!
本文来源:https://www.51html5.com/a1054.html
上一篇:CSS3 过渡特性创建信封效果的联系表单
下一篇:7款纯CSS3实现的炫酷动画应用
﹝JavaScript高级程序设计36.pdf﹞相关内容
- EasyDropDown:很棒的下拉菜单,含精美主题
- HTML5高级编程之像素处理及粒子效果
- 在IE中使用高级CSS3选择器
- 征服高级CSS选择器
- Adobe Flash Player中的收费高级功能
- Adobe向游戏商推Flash高级功能要求分成9%
- IDF2012:英特尔将优化HTML5推开发工具
- IDF2012:HTML5带来软件应用分化?
- 2012秋季IDF:HTML5软件编程通用工具
- 向非程序员解释 JavaScript