getSelection()是浏览器原生方法,用于获取页面当前选中文本及选区范围,返回Selection对象,常用toString()提取文本并需空值判断,支持现代浏览器但需注意iframe同源、移动端兼容性及selectionchange事件监听。

在JavaScript中,getSelection() 是浏览器原生提供的方法,用于获取用户当前在页面中选中的文本内容,适用于网页编辑、富文本操作、快捷翻译等场景。
基本用法:获取选中文本字符串
调用 window.getSelection()(或简写为 getSelection())会返回一个 Selection 对象,其 toString() 方法可直接转为选中的纯文本:
- 最常用写法:
const text = getSelection().toString(); - 推荐加空值判断,避免控制台报错:
const selection = getSelection(); const text = selection && selection.toString().trim(); - 注意:该方法返回的是“当前全局选中”,不区分 input、textarea 或 div[contenteditable],但对
<input>和<textarea>元素,更推荐用.value.substring(.selectionStart, .selectionEnd),因为getSelection()在这些元素聚焦时可能返回空或不准确
获取选中位置与范围信息
Selection 对象不仅含文本,还包含选区的 DOM 范围(Range)。常用属性有:
-
rangeCount:选区数量(通常为 1) -
getRangeAt(0):获取第一个 Range 对象 -
anchorNode/focusNode:选区起点和终点所在的节点 -
anchorOffset/focusOffset:对应节点内的字符偏移量
例如,想高亮选中文本并记录位置,可这样提取范围:
const sel = getSelection();<br>
if (sel.rangeCount > 0) {<br>
const range = sel.getRangeAt(0);<br>
console.log('起始节点:', range.startContainer, '偏移:', range.startOffset);<br>
}
兼容性与常见陷阱
getSelection() 在所有现代浏览器中都支持(包括 IE9+),但需注意以下几点:
立即学习“Java免费学习笔记(深入)”;
- 在 iframe 中使用时,需确保访问同源,否则会因跨域限制无法获取选区
- 页面未聚焦(如切换标签页)时,
getSelection()仍返回上次选区,不会自动清空 - 移动端 Safari 对某些 contenteditable 区域的选区支持不稳定,建议配合
selectionchange事件监听 - 不要在
document.execCommand(已废弃)之后立即调用,部分旧版浏览器可能延迟更新选区
实用小技巧:监听选区变化
可通过监听 selectionchange 事件实时响应用户选中行为:
- 注册监听:
document.addEventListener('selectionchange', () => { console.log(getSelection().toString()); }); - 该事件在鼠标释放、键盘方向键选中、双击等操作后触发,但不保证每次选中都触发(如快速拖动可能合并)
- 若需精确控制,可结合
mousedown+mouseup或keyup做兜底判断










