zoukankan      html  css  js  c++  java
  • 范围

    创建 createRang()

    给一段HTML

            <div id="div1">
                <p id="p1">
                    <b>hello </b>world
                </p>
            </div>

    有两个定义范围的方法, selectNode 和 selectNodeContents

    前面的范围包括了div,后面的就不能

           b.selectNode(a);
                c.selectNodeContents(a);

    定义下来后,本身的5大属性也尘埃落定

    1. Range {}
      1. collapsedfalse
      2. commonAncestorContainerdiv#div1
      3. endContainerdiv#div1//指向上一级
      4. endOffset2       //作为同类结点startOffset+1
      5. startContainerdiv#div1//指向上一级
      6. startOffset1   //有一个“ ” 结点,所以是1
      7. __proto__Range
    1. Range {}
      1. collapsedfalse
      2. commonAncestorContainerp#p1
      3. endContainerp#p1//指向上一级
      4. endOffset: 2     // Text长度
      5. startContainerp#p1//指向上一级
      6. startOffset0    //开始是0
      7. __proto__Range

    为了更好的控制精度

    又有了下面的方法

    setStartBefore()

    setStartAfter()

    setEndBefore()

    setEndAfter()


    还有更复杂的选择
    setStart(a,b) a:startContainer  b:startOffset
    setEnd(a,b)  a:endContainer   b:endoffset
                for(i=0,len=a.parentNode.childNodes.length;i<len;i++){
                    if(a.parentNode.childNodes[i]==a){
                        pos=i;
                        break;
                    }
                }
                b.setStart(a.parentNode,pos);
                b.setEnd(a.parentNode,pos+1);
                c.setStart(a,0);
                c.setEnd(a,a.childNodes.length);
                console.log(b,c);

    结果和上面的一样

    但他的作用主要并不是这个

    我们可以用它,在hello world中,截取 llo w 之类的

                var helloword=a.firstChild.firstChild;
                var worldword=a.lastChild;
                var b=document.createRange();
                b.setStart(helloword,2);
                b.setEnd(worldword,2);

     截取了这段范围

    我们可以删除他  a.deleteContenes();

    剪贴  var b=a.extractContents();(用b先保存他

    复制 var c=a.cloneContents();


    范围里面添加样式
                b.setStart(helloword,2);
                b.setEnd(worldword,2);
                var span=document.createElement("span");
                span.appendChild(document.createTextNode("inserted text"));
                span.style.color="red";
                b.insertNode(span);

    对范围 b用insertNode函数

    可以在范围前面添加有样式的文字

    如果我们不想插入内容结点,单纯地想增加样式

    b.surroundContents(span)


    折叠dom范围
    一个属性一个方法
    a.collapsed    输出是true是折叠在起点,false是折叠在最后
    a.collapse(true/false)  控制折叠前面还是后面

       比较DOM范围
    方法:compareBoundaryPoints( a,b)  b表示第二个范围
    a有四种
    START_TO_START
    START_TO_END
    END_TO_END
    END_TO_START   分别比较一个范围的起/终点  和 另一个范围的起/终点
    返回  -1 0  1
    分别表示前面  相同   后面

    辅助DOM范围
    var a=b.cloneRange()
    和上面不同,那个是复制范围里面的文本,这个是范围的复制

    用完这段范围后的清理
    a.detach()
    a=null;
  • 相关阅读:
    VS2012 for SharePoint2013 Tool安装
    SharePoint 2013网站管理网站策略(关闭和删除策略)
    呼风唤雨的公交
    ASP、Access、80040e14、保留关键字、INSERT INTO 语句的语法错误
    表格边框设置
    DotNet开发中关于SQLServer连接的两种方法之比较
    SQL语句集锦
    动态网页设计笔记
    SQL SERVER中日期 where 问题的解决
    配置你的ASP.NET运行环境
  • 原文地址:https://www.cnblogs.com/vhyc/p/5883426.html
Copyright © 2011-2022 走看看