用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. What is the Xcopy Command?:

    Quote from: http://pcsupport.about.com/od/commandlinereference/p/xcopy-command.htm The xcopy command ...

  2. jQuery选择器(适合初学者哟....)

    选择器是jQuery最基础的东西,本文中列举的选择器基本上囊括了所有的jQuery选择器,也许各位通过这篇文章能够加深对jQuery选择器的理解,它们本身用法就非常简单,我更希望的是它能够提升个人编写 ...

  3. html定义对象

    <object>定义一个对象<param>为对象定义一个参数 参数的名称:name = "" 参数的值:value=""classid: ...

  4. SQL 添加字段和默认值脚本

    --插入字段和默认值alter table Acc_WayBill add DeclaredValue nvarchar(50)goEXEC sys.sp_addextendedproperty @n ...

  5. sql日期函数

    1.sql常用日期函数 当我们在进行数据处理的时候,常常需要用到日期函数的计算,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配.只要数据包含的只是日期部分,运行查询就不会出问题. ...

  6. PHP对URL设置

    一.URL规则  1.默认是区分大小写的  2.如果我们不想区分大小写可以改配置文件   'URL_CASE_INSENSITIVE'=>true,               //url不区分 ...

  7. Python 学习之urllib模块---用于发送网络请求,获取数据(5)

    查询城市天气最后一节 需要导入上一节的结果city10.py #!/usr/bin/python# -*- coding: UTF-8 -*-import urllib.requestfrom  ci ...

  8. 【python】【转】if else 和 elif

    else和elif语句也可以叫做子句,因为它们不能独立使用,两者都是出现在if.for.while语句内部的.else子句可以增加一种选择:而elif子句则是需要检查更多条件时会被使用,与if和els ...

  9. odoo 清除所有运行数据

    测试odoo,如果需要一个干净的db.经常需要清除掉所有业务数据.做如下操作,较为方便 1:建立一个服务器动作,动作的python代码入下. 然后新建一个菜单,菜单动作关联到 这个动作.需要清空db, ...

  10. LED汽车前大灯

    一.LED汽车前大灯遇到问题.分析和解决 问题1: 当电源电压增大时,LED等闪烁,而且电源电压增大的越多闪烁的频率越低. 原因分析: 电源电压从12V升高到24V过程中,开关MOS管的Vds增大,Q ...