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

瀏覽器相容性

另見