DOM范围

DOM LEVEL2 Traversal and Range 模块定义了range接口,通过范围选择文档中的一个区域,不必考虑节点的界限。

【创建】:

var range = document.createRange();

IE8及更早版本不支持Range,但支持文本范围TextRange(支持元素有body、button、input、textarea)
【IE创建】
        Document.body.createTextRange();

【方法】:
1.精确控制范围包含哪些节点:

range.setStartBefore(节点) 范围起点在节点前
range.setStartAfter(节点) 范围起点在节点后
range.setEndBefore(节点) 范围终点在节点前
range.setEndAfter(节点) 范围终点在节点后

2.简单选取文档中的一部分:

range.selectNode(节点)   --包含节点及其子节点
{其中,startContainer、endContainer为节点的父节点,startOffset为节点在父节点中的位置,
endOffset = startOffset+1}

range.selectNodeContents(节点) --包含其子节点
{其中,startContainer、endContainer为节点,startOffset始终为0,endOffset 为节点的子节点个数}

【IE方法】选择元素的所有文本,包括html标签(类似range.selectNode(节点)方法)
        range.moveToElementText(节点)
        range.htmlText  //取得范围的所有内容(包括html标签)
        找到给定文本
        range.findText(文本)  //找到第一次出现的文本
        range.findText(文本,数值)//数值为正:从当前位置向后找另一个文本;
                            //数值为负:从当前位置向前找另一个文本
        range.text    //返回范围中的文本
        range.text = 文本   //设置范围中的文本
        range.pasteHtml(文本) //设置范围中的文本

3.复杂选择文档中的部分&选择节点的一部分

选择文档中的部分:
setStart(startContainer, startOffset)
setEnd(endContainer,endOffset)
选择节点的一部分:
setStart(节点,起始偏移量)
setEnd(节点,终止偏移量)

【IE方法】
    move(移动单位,数量) 折叠当前范围(让起点和终点相同)
    moveStart(移动单位,数量)  移动范围的起点
    moveEnd(移动单位,数量) 移动范围的终点
    expand(移动单位,数量) 将范围规范化,将部分选择的文本扩展到全部选中
    (移动单位):
        “character”:按字符移动
        “word”:按单词移动(非空格)
        “sentence”:按句子移动
        “textedit”:移动到当前范围的开始或结束位置

4.移除范围内容

range.deleteContents()  从文档中删除范围选区,保留原有DOM结构
range.extraContents()  从文档中移除范围选取并返回范围的文档片段

5.清理范围(恢复原文档)

range.detach();  //从文档中分离
range = null;  //解除引用

6.复制范围内容

range.cloneContents() 把范围内容赋给文档片段对象(DocumentFragment)

7.复制范围:

range.cloneRange() 创建范围的副本(新的range对象),修改新范围不会影响原来的范围

【IE方法】
    range.duplicate()  创建范围的副本(新的range对象),修改新范围不会影响原来的范围

8.在范围选区中插入内容:

range.insertNode(节点)  在范围内部,将节点插在范围选区前面
range.surroundContents(节点) 环绕范围选区,将节点插在范围选区前面

9.折叠范围

range.collapse(true)  折叠到范围的开始位置
range.collapse(false) 折叠到范围的结束位置
检测范围是否处于折叠状态,可确定范围中的两个节点是否紧密相邻
range.collapsed //true表示折叠状态

【IE方法】
    range.boundingWidth // 0表示折叠状态

10.比较范围(确定范围是否有公共的边界(起点/终点))

range1.compareBoundaryPoints(比较方式,range2)
    返回值:
        -1:范围1边界在范围2前
        0:范围1边界与范围2一样
        1:范围1边界在范围2后
    比较方式:
        Range.START_TO_START  比较范围1和范围2的起点
        Range.START_TO_END 比较范围1的起点和范围2的终点
        Range.END_TO_END 比较范围1和范围2的终点
        Range.END_TO_START 比较范围1的终点和范围2的起点

【IE方法】
    range1.compareEndPoints(比较方式,range2)
    返回值:
        -1:范围1边界在范围2前
        0:范围1边界与范围2一样
        1:范围1边界在范围2后
    比较方式:
        StartToStart 比较范围1和范围2的起点
        StartToEnd 比较范围1的起点和范围2的终点
        EndToStart 比较范围1和范围2的终点
        EndToEnd 比较范围1的终点和范围2的起点
    ~判断两个范围是否相等
        range1.isEqual(range2)
    ~判断两个范围是否有包含关系
        range1.isRange(range2)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值