现代标准方式是 window.getSelection(),返回 Selection 对象以获取用户选中的纯文本(sel.toString())、Range 数量(sel.rangeCount)及首个 Range(sel.getRangeAt(0));document.selection 已废弃,仅限 IE10 及更早版本使用。

JavaScript 中获取用户当前选中的文本区域(选区),不能用 document.selection,因为它仅在旧版 IE(IE 10 及更早)中存在,已彻底废弃;现代浏览器统一使用 window.getSelection()。
✅ 现代标准方式:window.getSelection()
window.getSelection() 返回一个 Selection 对象,代表用户在页面中选中的内容(可跨多个元素、包含富文本)。它兼容所有现代浏览器(Chrome、Firefox、Safari、Edge)。
- 调用后直接获取选区对象:
const sel = window.getSelection(); - 常用属性:
-
sel.toString()→ 返回选中的纯文本内容 -
sel.rangeCount→ 当前选区包含的Range数量(通常为 1) -
sel.getRangeAt(0)→ 获取第一个 Range(可用于定位、操作 DOM)
-
- 示例:点击按钮获取并弹出选中文本
document.getElementById('btn').addEventListener('click', () => {
const sel = window.getSelection();
if (sel.rangeCount > 0) {
alert('你选了:' + sel.toString().trim());
}
});
❌ document.selection 已淘汰,不要使用
document.selection 是 IE 5.5–10 的私有 API,返回 TextRange 对象,与现代 Selection 不兼容。Edge(基于 Chromium)和所有新版浏览器均不支持,且无法 polyfill。若代码中仍看到它,说明需要升级兼容逻辑。
- IE 特有方法如
document.selection.createRange()在其他浏览器会报错 - 检测时不应依赖
'selection' in document,而应优先检测window.getSelection
? 兼容旧 IE 的写法(仅限必须支持 IE9–10 的场景)
如果项目仍需兼容 IE9–10,可做简单降级处理,但注意:IE8 及更早版本连 document.selection 的部分能力也受限,建议直接放弃支持。
- 安全获取选中文本的通用函数:
function getSelectedText() {
if (window.getSelection) {
return window.getSelection().toString().trim();
} else if (document.selection && document.selection.type !== 'Control') {
return document.selection.createRange().text.trim();
}
return '';
}
⚠️ 注意:document.selection.type === 'Control' 表示用户选中的是多个独立元素(如多张图片),此时 .text 可能为空或不可靠,应避免直接使用。
? 实际使用建议
- 监听
mouseup或selectionchange事件来响应选区变化(selectionchange在 document 上触发,更精准) - 对选区做 DOM 操作前,先用
getRangeAt(0)获取 Range,再用range.cloneContents()或range.surroundContents()安全处理 - 在 iframe 中获取选区,需切换到对应 iframe 的
window上调用getSelection()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











