文本选择及操作

应用场景

选取一段文本,对该段文本进行操作

兼容性
  1. window.getSelection() 或 document.getSelection()
    • FF、Chrome、IE9(含)+、Opera、Safari
  2. document.selection
    • IE8
常用属性及方法
var selectionObj = window.getSelection();
  1. 获取选取文本的内容

    var selectedText = selectionObj.toString();

    该方法可以获取到选择的文本内容,不受节点限制
    html <p>本书原作者 Zakas 长期<span class="selected">供职于雅虎</span>,是著名的 JS 库 YUI 的主要作者,有着非<span class="selected">常丰富的一线</span>工作经验。他同时也是一个成功的作者,其最重要的著作《 JavaScript 高级编程》基本上是 JS 领域的必读之作,而他还出版了另一些质量很高的著作。《高级编程》一书实际上并不是完全高深的内容,而是从基本的层次开始讲述,逐步提高,全书结构比较良好,对初学者或有一定经验的开发者来说都是很有用的。</p>
    569926-20170211085154104-1321258170.png
    此时selectedText著名的 JS 库

    569926-20170211085205026-1629434881.png
    此时selectedText于雅虎,是著名,所以toString方法不受标签限制,返回选取的文本内容

  2. 获取选取文本起止点所在节点
    js var anchorNode = selectionObj.anchorNode; var baseNode = selectionObj.baseNode; var extentNode = selectionObj.extentNode; var focusNode = selectionObj.focusNode;
    anchorNodebaseNode为选取文本起始点所在节点,extentNodefocusNode为选取文本结束点所在节点

    569926-20170211085154104-1321258170.png
    此时,不管是从前向后选取还是从后向前选取,选取的文本都在,是著名的 JS 库 YUI 的主要作者,有着非范围内,所以anchorNodebaseNodeextentNodefocusNode是相同的

    569926-20170211085205026-1629434881.png
    此时,如果是从前向后选取,anchorNodebaseNode应该是<span class="selected">供职于雅虎</span>extentNodefocusNode,是著名的 JS 库 YUI 的主要作者,有着非;如果是从后向前选取,则相反
  3. 获取选取文本在其所在节点中的起止位置
    javascript var anchorOffset = selectionObj.anchorOffset; var baseOffset = selectionObj.baseOffset; var extentOffset = selectionObj.extentOffset; var focusOffset = selectionObj.focusOffset;
    anchorOffsetbaseOffset为选取文本起点所在节点的位置(从0开始,从左向右数),extentOffsetfocusOffset为选取文本结束点所在节点的位置(从0开始,从左向右数)

    569926-20170211085154104-1321258170.png
    此时,选取的文本在同一节点内,如果是从前向后选取,则anchorOffsetbaseOffset2extentOffsetfocusOffset10,因为从前开始数0,到字前,为2,到字后,为10JS前后有空格);相反的,如果从后向前选取,则赋值交换

    569926-20170211085205026-1629434881.png
    此时,选取的文本不在同一节点内,如果是从前向后选取,则anchorOffsetbaseOffset为起点字在节点<span class="selected">供职于雅虎</span>中的起始位置3(字之前的位置),extentOffsetfocusOffset为结束点字在节点,是著名的 JS 库 YUI 的主要作者,有着非中的结束位置4(字之后的位置);如果是从后向前选取,则赋值交换
  4. 判断是否有选取内容
    有多种方法可以判断当前是否有选取的内容
    • anchorNodenull
    • toString返回为空
    • anchorOffsetfocusOffset相等
    • isCollapsedtrue
    • type等于CaretNone(当有选取内容时,typeRange
    • rangeCount0
IE8下的使用
var selectionObj = document.selection;
var rangeObj = selectionObj.createRange();

IE8通过createRange方法将选取的文本作为块处理,位置标记没有起止点之分

{
    boundingHeight: 19,
    boundingLeft: 213,
    boundingTop: 16,
    boundingWidth: 96,
    htmlText: '<SPAN class="selected">雅虎</SPAN>,是著名',
    offsetLeft: 211,
    offsetTop: 14,
    text: '雅虎,是著名'
}

在IE8下还可以通过命令execCommand对选取的文本进行操作

转载于:https://www.cnblogs.com/tian-xie/p/6388626.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值