HTML5编辑API之Range对象

1.range对象基本概念
一个range对象代表页面上的一段连续区域。通过Range对象,可以获取或修改网页上的任何区域。
range对象方法
selectNode
将range对象的起点指定为某个节点的起点,将range对象额重点指定为该节点的终点。
使range对象所代表的区域中包含该节点。该节点并不将该节点设置为高亮选取状态。
selectNodeContens
将range对象的起点指定为某个对象的所有内容的起点,将range对象的终点指定为该节点内容的终点。使range对象所包含的区域中包含该节点的所有内容。
deleteContents
用于将range对象所包含的内容从页面当中删除。
 
<body>
<script>
    function deleteRangeContent(onlyContent){
        var div=document.getElementById("div");
        var rangeObj=document.createRange();
        if(onlyContent){
            //选取整个元素的内容
            rangeObj.selectNodeContents(div);
            rangeObj.deleteContents();
        }else{
            //选取整个元素
            rangeObj.selectNode(div);
            rangeObj.deleteContents();
        }
    }
</script>
 
    <div id="div" style="width: 300px;height: 50px;">
        元素中的内容
    </div>
<!--删除的是内容-->
    <button onclick="deleteRangeContent(true);">删除内容</button>
<!--删除的是整个元素-->
    <button onclick="deleteRangeContent(false);">删除元素</button>
</body>
 
 
<script>
    function rangeTest(){
        var html;
        showRangeDiv=document.getElementById("showRange");
        selection=document.getSelection();
        if(selection.rangeCount>0){
            html="您选取了>"+selection.rangeCount+"<内容<br/>";
            for(var i=0;i<selection.rangeCount;i++){
                var range=selection.getRangeAt(i);
                html+="第"+(i+1)+"段内容为"+range+"<br/>";
            }
            showRangeDiv.innerHTML=html;
        }
    }
</script>
    <h2>selection对象与range对象的使用</h2>
    <input type="button" value="点击我" onclick="rangeTest()">
    <div id="showRange"></div>
<!--在谷歌浏览器中,只能选取一段内容,在火狐浏览器中,可以选取多段内容-->
谷歌浏览器测试
火狐浏览器测试
 
range对象的方法
setStart
用于将某个节点中的某处位置指定为range对象所代表区域的起点位置
setEnd
用于将某个节点中的某处位置指定为range对象所代表区域的结束位置
 
<body>
<script>
    function deleteChar(){
        var div=document.getElementById("myDiv");
        var textNode=div.firstChild;
        var rangeObj=document.createRange();
        rangeObj.setStart(textNode,1);
        rangeObj.setEnd(textNode,4);
        rangeObj.deleteContents();
    }
</script>
    <div id="myDiv" style="color: red;">这段文字是用来删除的</div>
    <button onclick="deleteChar();">删除文字</button>
</body>
setStartBefore
用于将某个节点的起点位置设定为range对象所代表区域的起点位置
setStartAfter
用于将某个节点的终点位置设定为range对象所代表区域的起点位置
setEndBefore
用于将某个节点的起点位置设为当前range对象所代表区域的终点位置
setEndAfter
用于将某个节点的终点位置设置为当前range对象所代表区域的终点位置
 
<body>
<script>
    function deleteRow(){
        var table=document.getElementById("myTable");
        if(table.rows.length>0){
            var row=table.rows[0];
            var rangeObj=document.createRange();
            rangeObj.setStartBefore(row);
            rangeObj.setEndAfter(row);
            rangeObj.deleteContents();
        }
    }
</script>
    <table id="myTable" border="1" cellspacing="0" cellpadding="0">
        <tr>
            <td>内容1</td>
            <td>内容2</td>
        </tr>
        <tr>
            <td>内容3</td>
            <td>内容4</td>
        </tr>
    </table>
    <button onclick="deleteRow()">删除第一行</button>
</body>
range对象的方法(二)
cloneRange()
用于当前range对象的复制,该方法返回当前range的对象
 
<body>
<script>
    function cloneRange(){
        var rangeObj=document.createRange();
        rangeObj.selectNodeContents(document.getElementById("p"));
        var rangeClone=rangeObj.cloneRange();
        alert(rangeClone.toString());
    }
</script>
    <p id="p">你好,我在这!</p>
    <button onclick="cloneRange()">克隆</button>
</body>
 
cloneContents()
用于在页面上追加一段代码,并且把rang对象里的代码追加带range对象之后
 
<body>
<script>
    function cloneContent(){
        var div=document.getElementById("div");
        var rangeObj=document.createRange();
        rangeObj.selectNodeContents(div);
        var docFranMent=rangeObj.cloneContents();
        div.appendChild(docFranMent);
    }
</script>
<div id="div">
    你好吗?
    <br/>
    <button onclick="cloneContent()">克隆</button>
    <br/>
</div>
</body>
extractContents()
英文意思:选取,获取,提取的意思
range对象所代表区域中的html代码克隆到documnetFrankment对象中
 
<body>
<script>
    function moveContent(){
        var srcDiv=document.getElementById("srcDiv");
        var distDiv=document.getElementById("distDiv");
        var rangeObj=document.createRange();
        //获取第一个div中的内容
        rangeObj.selectNodeContents(srcDiv);
        //提取出rangeObj里面的内容
        var docFragment=rangeObj.extractContents();
        distDiv.appendChild(docFragment);
 
    }
</script>
    <div id="srcDiv" style="color: #fff;width: 300px;height: 50px;">你好吗</div>
    <div id="distDiv" style="color: #fff;width: 300px;height: 50px;"></div>
    <button onclick="moveContent()">移动元素</button>
</body>
insertNode()
用于指定节点插入到某range对象所代表的区域当中,插入位置为range对象所代表的起点位置,
如果该点已经存在了页面当中,那该节点被移动到range对象所代表的起点处。
 
<body>
<script>
    function moveButton(){
        var btn=document.getElementById("button");
        var selection=document.getSelection();
        if(selection.rangeCount>0){
            var range=selection.getRangeAt(0);
            range.insertNode(btn);
        }
    }
</script>
<div onmouseup="moveButton()" style="width: 400px;">
    测试测试测试测试测试测试测试测试测试测试测试测试测试
</div>
<button id="button">按钮</button>
</body>
compareBoundaryPoints()
英文意思:比较的边界点
用于比较两个range对象的起点位置或终点位置,比较的结果是一个在谁前面,一个在谁后面
 
<body>
<script>
    function testPlace(){
        var boldText=document.getElementById("boldTest");
        var boldRange=document.createRange();
        boldRange.selectNodeContents(boldText.firstChild);
        var selection=document.getSelection();
        if(selection.rangeCount>0){
            var selRange=selection.getRangeAt(0);
            if(selRange.compareBoundaryPoints(Range.START_TO_END,boldRange)<=0){
                alert("选取的文字在粗体前面");
            }else{
                if(selRange.compareBoundaryPoints(Range.END_TO_START,boldRange)>=0){
                    alert("选择的文字在粗体后面");
                }
            }
        }
    }
 
</script>
这是一段文字,我也不<b id="boldTest">知道</b>要写什么,随便吧。
<br/>
<button onclick="testPlace()">位置比较</button>
</body>
collapse()
英文意思:崩溃,倒塌,折叠,垮台
用于range对象所代表的区域的终点移动到该区域的起点处,或将range所代表区域的起点移动到该区域的终点处。
 
<body>
<script>
    var rangeObj=document.createRange();
    function selectRangeConents(){
        var div=document.getElementById("div");
        rangeObj.selectNode(div);
    }
    function unselect(){
        rangeObj.collapse(false);
    }
    function showRange(){
        alert(rangeObj.toString());
    }
</script>
<div id="div" style="width: 300px;height: 50px;">元素</div>
<button onclick="selectRangeConents()">选择元素</button>
<button onclick="unselect()">取消元素</button>
<button onclick="showRange()">显示Range内容</button>
</body>
 
detach()
英文意思:拆开分开,派遣的意思
用于浏览器中释放range对象,释放之后将不能再次访问range对象,否则将出现脚本错误
通常在不要的时候我们要释放没有必要使用的range对象,提高应用程序在运行时候的性能。
rangeObj.detach();
 
 
posted @ 2017-03-03 10:50  constance_girl  阅读(271)  评论(0编辑  收藏  举报