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. KVC、KVO

    概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...

  2. ssh原理[转]

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

  3. 自己造容器List

    //自己造容器--List /* 1.iterator 2.头迭代器 3.尾迭代器 4.链表长 5.判空 6.清除 7.取头元素 8.取尾元素 9.头插入 10.尾插入 11.头删除 12.尾删除 1 ...

  4. Zeppelin添加mysql解释器

    安装Apache zeppelin 1 wget http://apache.fayea.com/zeppelin/zeppelin-0.6.2/zeppelin-0.6.2-bin-all.tgz ...

  5. 【转】Java线程与Linux内核线程的映射关系

    Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程. Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是 ...

  6. Smarty练习增删改

    <?php //将题目表显示在页面 include("../init.inc.php"); include("../DBDA.php"); $db = n ...

  7. 34.编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法void printCapitalLetter();在接口InterfaceB中有个方法void printLowercaseLetter();然 后写一个类Print实现接口InterfaceA和InterfaceB,要求printCapitalLetter()方法 实现输出大写英文字母表的功能,

    //接口InterfaceA package jieKou; public interface IInterfaceA { void printCapitalLetter(); } //接口Inter ...

  8. 关于oracle数据库(2)

    数据备份.数据删除.数据还原 连接数据库,查看scott用户下面的所有表 数据备份(数据导出)要输入导出文件路径和文件名(文件扩展名可输入也可以不输入) 导出成功后,可以在上面输入的文件路径下面看到导 ...

  9. 微信web开发工具

    http://mp.weixin.qq.com/wiki/10/e5f772f4521da17fa0d7304f68b97d7e.html#.E4.B8.8B.E8.BD.BD.E5.9C.B0.E5 ...

  10. Python笔记1-20151021

    一.字符串和字符编码 字符 ASCII Unicode UTF-8 A 01000001 00000000 01000001 01000001 中 x 01001110 00101101 111001 ...