selection对象代表当前激活选中区,通常是高亮的文本块

创建选中区:

1.拖拽文本

2.脚本创建 cerateRange()

获取selection对象

IE     document.selection()

非IE  window.getSelection()

eg:

<div>请选中这里的部分文字。</div>
<div>
    <input type="button" value="加粗" onclick="select()" />
</div>

<script>
    function select() {
        var a = window.getSelection();
        console.log(typeof a.anchorNode);
    }
</script>

输出Selection对象

属性:

anchorNode:包含起点的节点,不存在则为null(注意一段文本就是一个节点!包括p内的文本,a,div等标签内的文本,不包括输入框内的文本!!)

anchorOffset:起点在anchorNode中的偏移量

focusNode:包含结束点的节点,不存在则为null

focusOffset:结束点在focusNode中的偏移量,focusOffset可以比anchorOffset小,只要从后向前选择

isCollapsed:起点和结束点是否重合

rangeCount:selection中range的数目,一般一个,ctrl键配合多个

-------------------------------------------------------------------------------------------------------------------------------------

方法:

1.getRangeAt(index)

从当前selection中获取某一个range对象

2.collapse(parentNode, offset)

将开始和结束点合并到parentNode的offset位置,多用于改变可编辑div的焦点,,,

3.extend(parentNode, offset)

将结束点移动到parentNode的offset位置

4.collapseToStart()

将结束点移动到selection的起点,注意是selection的起点而不是开始点,意味着只会向前不会向后,多用于取消选中状态,多个range时也是如此

5.collapseToEnd()

将开始点移动到selection的结束点

6.selectAllChildren(parentNode)

将parentNode的所有后代变成selection,原有的selection被抛弃,可用于全选

7.addRange(range)

将range添加到selection中,注意chrome中只能有一个range

8.removeRange(range)

从selection中移除range

兼容性:不佳,亲测只有IE可以

9.removeAllRanges()

移除所有的range,多用于取消选择状态

10.toString()

返回selection的纯文本,也就是返回选中区域的文本内容

11.containsNode(aNode,aPartlyContained)

判断一个节点是不是selection的一部分

aNode要判断的节点

aPartlyContained true 只要有一部分属于就返回true  false 全部属于才返回true

--------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------

range对象:

属性:

collapsed:此Range对象代表的区域开始点和结束点是否已合并

commonAncestorContainer:此Range对象代表的整体区域位于哪个节点(元素或一段文本)

startContainer:此Range对象的开始点位于哪个节点

startOffset:返回此Range对象代表的区域的起点在startContainer中的位置,返回整数

endContainer:此Range对象的结束点位于哪个节点

endOffset:返回此Range对象代表的区域的结束点在endContainer中的位置

方法:

document.createRange() 创建Range对象

Range初始化

selectNode(node) 选择文档的一部分

将整个node节点的信息,包括node本身填充进Range

selectNodeContents(node)

将整个弄的节点内的信息,不包括node本身,填充进Range

值得注意的是,用脚本创建Range不会像手动一样使选中部分变蓝!

操作Range

deleteContents()

从文档中彻底删除Range区域的内容

extractContants()

从文档中提取Range区域的内容,返回值为提取的内容,可以对返回值进行操作,例如插入页面其他地方

cloneRange()

复制Range区域

detach()

分类该区域

-----------------------------------------------------------------------------------------------------------------------

低版本IE兼容

创建Range (低版本IE只支持文本Range)

document.body.createRange()

初始化

findText(string)

找到第一次出现的给定文本,并将范围移过来环绕文本。如果找到文本返回true,否则返回false.

eg: var a= document.body.createRange();

  a.findText("选中此文本");

  alert(a.text);

高版本无需此法,不多解释

详情请看:http://www.cnblogs.com/zourong/p/4800922.html

selection与range笔记的更多相关文章

  1. web dom api中的Selection和Range

    如果你做过wysiwyg这样的app,一个很让人头疼的问题是如何保证执行bold,italic等格式化操作后保持先前鼠标所在的位置.要好好的解决这个问题,就必须将Selection和Range的api ...

  2. 用 js 的 selection range 操作选择区域内容和图片

    原创文章,转载请注明出处并保留地址.原文地址:http://www.cnblogs.com/muge10/p/6723894.html 最近在做编辑器相关的东西,遇到一个需求,用户在编辑器中插入或者粘 ...

  3. If,for,range混合使用笔记-(VBA视频教程2:使用IF进行逻辑判断)

    -- 新建表格:#单元格a1-a100全部等于1的代码 Sub test() Dim i As Integer For i = To Range( Next End Sub -- 新建表格:#单元格a ...

  4. getSelection、range 对象属性,方法理解,解释

    网上转了一圈发现没有selection方面的解释,自己捣鼓下 以这段文字为例子.. <p><b>法国国营铁路公司(SNCF)20日承认,</b>新订购的2000列火 ...

  5. Range对象理解,浏览器兼容性,获取鼠标光标位置

    一.关于浏览器的兼容性 目前主要有3种关于range的类似的对象,分别是W3C range 对象,Mozzlia selection ,ie TextRange 关于这三种的区别,请查看文档 http ...

  6. 编辑器开发之 Range 范围对象的学习

    写在前面: 网上有各种富文本编辑器,微博分享等操作,这些功能非常实用,他们就是使用 range,selection 对象来实现的,这两个对象偏冷门,不涉及编辑器一般用不到,range 对象是对选区的操 ...

  7. 【原创】【2】rich editor系列教程。了解document.execommand操作,保存丢失的range,实时反馈样式给工具栏

    [原创][2]rich editor系列教程.了解document.execommand操作,保存丢失的range,实时反馈样式给工具栏 索引目录:http://www.cnblogs.com/hen ...

  8. 运用 Range 对象处理 Word 文档内容

    运用 Range 对象处理 Word 文档内容   在所有 Office 应用程序中,Microsoft Word 可能是应用最广泛的应用程序,它还经常在自定义 Office 解决方案中扮演重要的角色 ...

  9. javascript笔记——js获取input标签中光标的索引

    出处:http://www.cnblogs.com/MrZouJian/p/5850553.html function getTxt1CursorPosition(){ var oTxt1 = doc ...

随机推荐

  1. ssh原理[转]

    SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于 ...

  2. 【Python@Thread】thread模块

    一.关于Python多线程 Python解释器中可以同时运行多个线程,但是再任意时刻只能有一个线程在解释器运行. Python虚拟机的访问是由全局解锁器(GIL)控制的,由GIL保证同时只有一个线程的 ...

  3. erlang四大behaviour之三-gen_event

    来源:http://www.cnblogs.com/puputu/articles/1689623.html 1. 事件处理规则 在OTP中,事件管理器是一个事件可以发送到的命名对象,一个事件可以是一 ...

  4. SQL Server 2012中快速插入批量数据的示例及疑惑

    SQL Server 2008中SQL应用系列--目录索引 今天在做一个案例演示时,在SQL Server 2012中使用Insert语句插入1万条数据,结果遇到了一个奇怪的现象,现将过程分享出来,以 ...

  5. postgreSqL的序列sequence

    PostgreSQL uses sequences to generate values for serial columns and serial columns are generally wha ...

  6. ssl证书验证

    当我们在访问https网站时,浏览器就会自动下载该网站的SSL证书,并对证书的安全性进行检查. 其他概念不说了,有效期之类的验证也不说了.只说数字证书的真实性和可信性验证. 1.CA下发给网站的证书是 ...

  7. nginx(ubuntu)设置别名访问目录

    1 2 3 4 5 6 7 8 9 10 11 12 13 location /phpmyadmin/ { alias  /data/phpmyadmin/; index  index.html in ...

  8. HDU 5778 abs

    题意转化一下就是寻找一个数P,要求P质因素分解完后,质因素没有重复,还要保证abs(P*P-x)最小. 暴力,在sqrt(x)附近向下向上分别枚举一下. #pragma comment(linker, ...

  9. iOS tableView的系统分割线定格设置以及分割线自定制

    一.关于分割线的位置. 分割线的位置就是指分割线相对于tableViewCell.如果我们要根据要求调节其位置,那么在iOS7.0版本以后,提供了一个方法如下: if ([self.tableView ...

  10. Windows进程间通信(上)

    一.管道 管道(pipe)是用于进程间通信的共享内存区域.创建管道的进程称为管道服务器,而连接到这个管道的进程称为管道客户端.一个进程向管道写入信息,而另外一个进程从管道读取信息. 异步管道是基于字符 ...