zoukankan      html  css  js  c++  java
  • 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共同的祖先节点在文档树中位置最深的那个

    在把范围放到文档中特定的位置时,这些属性都会被赋值

  • 相关阅读:
    mysql 查询优化 ~ select count 知多少
    mongodb 案例 ~ 经典故障案例
    printk 驱动调试
    21天学通C++学习笔记(七):函数
    OPC UA
    MQTT
    分库分表
    水平、垂直权限问题(横向越权与纵向越权)
    数据库中的行转列和列转行
    面试知识点
  • 原文地址:https://www.cnblogs.com/sdgjytu/p/3770276.html
Copyright © 2011-2022 走看看