Window: getSelection() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

Window 接口的 getSelection() 方法返回与窗口的 document 关联的 Selection 对象,该对象表示用户选择的文本范围或插入符的当前位置。

语法

js
getSelection()

参数

无。

返回值

一个 Selection 对象,如果关联的文档没有 浏览上下文(例如,窗口是未附加到文档的 <iframe>),则返回 null

当在未显示的 <iframe> 上调用时(例如,设置了 display: none),Firefox 返回 null,而其他浏览器则返回一个 Selection 对象,其 Selection.type 设置为 None

示例

js
function foo() {
  const selObj = window.getSelection();
  alert(selObj);
  const selRange = selObj.getRangeAt(0);
  // do stuff with the range
}

注意

Selection 对象的字符串表示形式

在 JavaScript 中,当一个对象被传递给一个需要字符串的函数时(例如 window.alert()document.write()),该对象的 toString() 方法会被调用,并返回值传递给函数。当对象与其他函数一起使用时,它可能看起来像一个字符串,但实际上它是一个具有属性和方法的对象。

在上面的示例中,当 selObj 被传递给 window.alert() 时,会自动调用 selObj.toString()。然而,尝试直接在 Selection 对象上使用 JavaScript String 属性或方法(如 lengthsubstr)将导致错误(如果它没有该属性或方法),并且如果它确实有,也可能返回意外的结果。要将 Selection 对象用作字符串,请直接调用其 toString() 方法。

js
const selectedText = selObj.toString();
  • selObj 是一个 Selection 对象。
  • selectedText 是一个字符串(选中的文本)。

你可以调用 Document.getSelection(),它与 Window.getSelection() 的工作方式相同。

值得注意的是,目前在 Firefox 和 Edge (Legacy) 中,getSelection()<textarea><input> 元素的内容上不起作用。可以使用 HTMLInputElement.setSelectionRange()selectionStartselectionEnd 属性来解决此问题。

还要注意selection(选择)和focus(焦点)之间的区别。Document.activeElement 返回具有焦点的元素。

规范

规范
Selection API
# dom-window-getselection

浏览器兼容性

另见