用DOM范围实现简单选择

selectNode()和selectNodeContents()它们都接收一个DOM节点参数,然后使用该节点中的信息来填充范围,其中selectNode()方法选择整个节点,包括其子节点;而selectNodeContents()方法只选择节点的子节点

var range1=document.createRange();

var range2=document.createRange();

  p1=document.getElementById("p1");

range1.selectNode(p1);  //包含id为“p1”的整个节点

range2.selectNodeContents(p1);  //只包含id为“p1”的子节点

在调用selectNode()时,startContainer、endContainer和commonAncestorContainer都等于传入节点的父节点,而startOffset属性等于给定节点在其父节点的childNodes集合中的索引,endOffset等于startOffset加上选择了多少个节点

在调用selectNodeContents()时,startContainer、endContainer和commonAncestorContainer都等于传入的节点,而startOffset属性始终等于0(第一个子节点开始),endOffset等于子节点数量

更精细的控制

setStartBefore(refNode):将范围的起点设置在refNode之前,refNode就是范围选区的第一个子节点,同时会将startContainer设置为refNode.parentNode

setStartAfter(refNode):将范围的起点设置在refNode之后,refNode的后一个同胞元素就是范围选区的第一个子节点

setEndBefore(refNode):将范围的终点设置在refNode之前,上一个同胞元素是范围选区中最后一个子节点

setEndAfter(refNode):将范围的终点设置在refNode之后,refNode是范围选区中最后一个子节点

用DOM范围实现复杂选择

setStrat()和setEnd()方法,两个方法都接收两个参数,一个参照节点和一个偏移量值,对于setStart()来说,参照节点会变成startContainer,偏移量值会变成startOffset;对于setEnd()来说,参照节点会变成endContainer,偏移量值会变成endOffset

操作DOM范围中的内容

在创建范围时,内部会为这个范围创建一个文档片段,范围所属的全部节点都被添加到这个文档片段中,对于残缺的标签,范围会自动为其补全(注意:表示范围的内部文档片段中的所有节点,都只是指向文档中相应节点的指针)

第一个方法:deleteContents(),能够从文档中删除范围所包含的内容;

extractContents()也会从文档中移除范围选区,有一点不同的是它会返回被移除的文档片段,以便插入到文档中其他地方(注意,在使用appendChild()方法时,添加到文档中只是片段的子节点,非片段本身)

cloneContents(),创建范围对象的一个副本,再其他地方插入该副本

插入DOM范围中的内容

insertNode()可以向范围选区开始处插入一个节点

range.insertNode(span);  //插入节点

surroundContents()方法,环绕范围插入内容,接收一个环绕范围内容的节点,后台会执行3步:

提取出范围中的内容(类似extractContent());

将给定节点插入到文档中原来范围所在的位置上;

将文档片段的内容添加到给定节点中。

  ...

var span=document.createElement("span");

span.style.backgroundColor="yellow";

range=surroundContents(span);

以上代码给范围选区添加黄色背景

折叠DOM范围

collapse()方法,接收一个布尔值参数,表示折叠到范围的哪一端,true表示折叠到范围的起点,false则为终点,collapsed属性确定范围是否折叠完毕

range.collapse(true);  //折叠到起点

alert(range.collapsed);  //输出true

检测某个范围是否处于折叠状态,可以帮助我们确定范围中两个节点是否紧密相邻

JavaScript高级程序设计37.pdf的更多相关文章

  1. JavaScript高级程序设计61.pdf

    JSON对象 早期的JSON解析器就是使用JavaScript的eval()函数,ECMAScript5对解析JSON的行为做出了规定,定义了全局对象JSON. JSON对象有2个方法:stringi ...

  2. JavaScript高级程序设计60.pdf

    错误处理 try-catch语句 try{ //可能会导致错误的代码 }catch(error){ //在错误发生时如何处理 } error是一个包含着错误信息的对象,它有一个message属性,保存 ...

  3. JavaScript高级程序设计58.pdf

    15章 使用Canvas绘图 略 16章 HTML5脚本编程 HTML5规范了新的HTML标记和JavaScript API,以便简化创建动态Web界面的工作 跨文档消息传递 简称XDM,指来自不同域 ...

  4. JavaScript高级程序设计57.pdf

    表单序列化 首先了解一下浏览器如何将数据发送给服务器 对表单字段的名称和值进行URL编码,使用和号(&)分隔 不发送禁用的表单字段 只发送勾选的复选框和单选按钮 不发送type为“reset” ...

  5. JavaScript高级程序设计55.pdf

    输入模式 HTML5为文本字段新增了pattern属性,这个属性的值是一个正则表达式,用于匹配文本框中的值 例如,只想在允许在文本字段中输入数值 <input type="text&q ...

  6. JavaScript高级程序设计54.pdf

    过滤输入 对于一些浏览器,可以使用正则表达式里的text()测试用户按下的按键,Firefox和safari(3.1版本之前)会对向上向下.退格键和删除键触发keypress事件,在Firefox中, ...

  7. JavaScript高级程序设计53.pdf

    共有的表单字段方法 每个表单字段都有两个方法:focus()和blur(),其中focus()用于将浏览器焦点设置到表单字段,激活表单字段.可以侦听页面的load事件 EventUtil.addHan ...

  8. JavaScript高级程序设计52.pdf

    表单脚本 表单的基础知识 在HTML中,表单是由<form>元素表示的,在Javascript对应的是HTMLFormElement类型,它继承自HTMLElement,因此具有与其他HT ...

  9. JavaScript高级程序设计50.pdf

    hashchange事件 HTML5新增了hashchange事件,以便在URL的参数列表(及URL中“#”号后面的所有字符串)发生变化时通知开发人员,之所以新增这个事件,是因为在Ajax应用中,开发 ...

随机推荐

  1. bzoj1014:[JSOI2008]火星人prefix

    思路:插入.修改操作是splay的模型,然后询问的话就可以二分答案,然后再用splay去判,关键就在于怎么去判断. 可以用字符串hash,splay每个节点维护一个hash域,然后就可以定义一个进制去 ...

  2. 嵌入Web资源的方法

    可以将js .图片.css等嵌入Assembly中,这样就不用将文件在aspx中写了,特别适合做自定义控件的时候将控件用到的资源打包. 将文件放到项目的合适路径,比如jpg文件所在路径的namespa ...

  3. 安装grid之前检查配置 ,报错如下

    centos 5 _x86_64 oracle 11.2 安装grid之前检查配置 ,报错如下 : ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -fi ...

  4. 青瓷qici - H5小游戏 抽奖机 0 创建工程

    安装运行平台需要nodejs,具体方法请参照官方说明文档. 运行后打开了一个空空的窗口. 首先我们进行工程设置,菜单>工程>设置 菜单里面设置我们游戏的名称,到时候会显示在游戏的title ...

  5. JavaScript入门介绍(二)

    JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...

  6. 禁止选择文本和禁用右键 v3.0

    禁止选中字体(注:在火狐浏览器没有起到效果作用) <script> function disableselect(e) { var omitformtags = ["input& ...

  7. TDirectory.GetFiles获取指定目录下的文件

    使用函数: System.IOUtils.TDirectory.GetFiles 所有重载: class function GetFiles(const Path: string): TStringD ...

  8. 基于类和redis的监控系统开发

    最近学习python运维开发,编写得一个简单的监控系统,现记录如下,仅供学习参考. 整个程序分为7个部分: 第一个部分根据监控架构设计文档架构如下: .├── m_client│   ├── conf ...

  9. css 浮动 相对定位 绝对定位区别

    今天下班在地铁上看了一个样式教学视频,因为最近在学习前端.以前刚毕业的时候,感觉后台才是王道,但最近发现,前端也很重要,比如:自己接一些私单做的时候,自己要根据需求做好界面,才能更加符合客户需求,不然 ...

  10. hibernate配置文件详细解释

    <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1.0' ...