[tr][td]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共同的祖先节点在文档树中位置最深的那个 在把范围放到文档中特定的位置时,这些属性都会被赋值 [/td][/tr] |
|