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;
  • 相关阅读:
    2015-05-27 用正则把oracle时间转化到mysql时间
    linux版idea14界面美观和windows,mac基本一致
    ubuntu 下自定义快捷键,,用着舒服
    ubuntu 方便好用的截图软件
    Integer 包装器类 大小比较
    win7、ubuntu双系统,遇到分区不可用问题,和卸载ubuntu后win7开不了机
    巧妙小思想
    读取16进制文件和校验图片格式的问题。 文件名后缀
    旧电脑变废为宝!
    Win10打开Autodesk软件时提示“管理员已阻止你运行此应用”
  • 原文地址:https://www.cnblogs.com/vhyc/p/5883426.html
Copyright © 2011-2022 走看看