花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 12|回复: 3

初识 Selection 对象

[复制链接]
  • TA的每日心情
    奋斗
    2026-7-2 13:09
  • 签到天数: 1860 天

    [LV.Master]伴坛终老

    3266

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2026-7-2 13:11 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    Selection 对象表示用户选择的文本范围或插入符号的当前位置。它代表页面中的文本选区,可能横跨多个元素。文本选区由用户按下鼠标左键不放并拖拽鼠标经过文字而产生。调用 window.getSelection() 方法可以获取 Selection 对象。

    正如文本开头引用框所介绍的,你也可以在上面的文本段落中自行选择任意文本。上面介绍 Selection 对象的引用框集成有一个功能:用鼠标手动选择任意文本,都会弹出一个 alert 窗口,窗口上展现被选择文本的相关信息。功能的实现仅使用了一个方法:selection.toString(),该方法返回选区内的完整文本,toString 是转换为字符串的意思。

    window.getSelection() 方法返回的是一个 Selection(选区)对象,该对象拥有如下主要属性

    • anchorNode :只读,返回选区起点所在的节点(Node)。anchor是“锚”之意,指选区开始时的定位点(鼠标按下时的那个点)
    • anchorOffset :只读,返回选区起点在 anchorNode 中的位置偏移量。需要注意两种情形:
      1. 如果 anchorNode 是文本节点、注释节点,返回锚点(anchor)到该节点中第一个字的字符个数
      2. 如果 anchorNode 是元素节点,返回锚点(anchor)之前的同级节点总数
    • focusNode :只读,返回选区终点所在的节点。focus意味“焦点”,这里指选区起点到终点的高亮区域
    • focusOffset :只读,返回选区终点在 focusNode 中的位置偏移量。需要注意两种情形:
      1. 如果 focusNode 是文本节点、注释节点,返回焦点(focus)到该节点中的第一个字的字符个数
      2. 如果 focusNode 是元素节点,返回焦点(focus)之前的同级节点总数
    • isCollapsed :只读,返回布尔值,表示选区的起始点和终点是否在同一个位置
    • :只读,选区方向,返回forward(自左向右)或 backward(自右向左)
    • rangeCount :只读,返回选区所包含的连续范围(range)的数量

    【注意】选区有方向(direction),可以自左向右或自右向左,取决于用户按下左键后往左或往右拖曳。选区的方向直接影响锚和焦点的位置,自左向右时锚前、焦点后,自右向左锚后、焦点前。

    下面是获取选区对象属性值的简单演示:

    请选择任意文本

    这行是 id="mama" div 的p标签文本,里面有两个mark元素节点

    这行是 div 标签,里面的内容是纯文本

    选区(Selection)对象的主要方法则有:

    • getRangeAt :返回选区包含的指定区域(Range)的引用,即获取指定选区的范围
    • collapse :将当前的选区折叠为一个点
    • extend :将选区的焦点移动到一个特定的位置
    • modify :修改当前的选区
    • collapseToStart :将当前的选区折叠到起始点
    • collapseToEnd :将当前的选区折叠到最末尾的一个点
    • selectAllChildren :将某一指定节点的子节点框入选区
    • addRange :一个区域(Range)对象将被加入选区
    • removeRange :从选区中移除一个区域
    • removeAllRanges :将所有的区域都从选区中移除
    • deleteFromDocument :从页面中删除选区中的内容
    • toString :返回当前选区的纯文本内容
    • containsNode :判断某一个 Node 是否为当前选区的一部分

    选区(Selection)对象的方法很多需要配合 range 对象使用,如开头随机选择选区就用上了 range 对象。下例仅演示 toStrong 和 delecteFromDocument 方法:

    选择本此方框内的任意文本会获取所选择的文本然后删除掉,直至删完为止(选择后如果没有弹出alert窗口,请再单击一下此方框)。全部删除文本内容后可单击下方按钮重置。


    【附】本文基于选区的核心JS代码(自动获取)

    评分

    参与人数 1威望 +30 金钱 +60 经验 +30 收起 理由
    梦江南 + 30 + 60 + 30 匠心独运,细节精致入微!

    查看全部评分

  • TA的每日心情
    奋斗
    2026-7-2 13:09
  • 签到天数: 1860 天

    [LV.Master]伴坛终老

    3266

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2026-7-2 13:18 | 显示全部楼层
    Selection 对象和即将会介绍的 Range 对象是操作 DOM 的核心接口,两个对象紧密相连,其概念、属性、方法等都较难理解,希望包括本文在内的系列介绍文章能帮助大家了解、理解这两个对象
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2026-7-2 09:50
  • 签到天数: 767 天

    [LV.10]以坛为家III

    541

    主题

    3万

    回帖

    7万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪缤纷心情心曲飞扬花好月圆飞龙在天音画大师天籁妙音共看流星风雨同行我心永远喜乐安康花潮贵宾

    发表于 2026-7-2 15:27 | 显示全部楼层
    黑黑老师介绍的这些代码,学会了能很好地看懂帖子中代码的作用。就是不懂英文,学起来困难重重。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2026-7-2 09:50
  • 签到天数: 767 天

    [LV.10]以坛为家III

    541

    主题

    3万

    回帖

    7万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪缤纷心情心曲飞扬花好月圆飞龙在天音画大师天籁妙音共看流星风雨同行我心永远喜乐安康花潮贵宾

    发表于 2026-7-2 15:28 | 显示全部楼层
    黑黑老师下午嚎!辛苦了!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2026-7-2 18:32 , Processed in 0.068794 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表