關於window.getSelection


轉自:https://blog.csdn.net/weixin_42420703/article/details/84892528

文章目錄
selection對象
術語
屬性
方法

window.getSelection(),返回一個Selection對象,表示用戶選擇的文本范圍或光標的當前位置。
selection對象
先來看下面兩個selection結果:
selection對象一:


selection對象二:


很奇怪,為什么同樣選中一段文字,為什么selection對象的屬性會不一樣呢?
那就需要明確一下Selection對象的各個屬性的意義了。

術語
錨點(anchor)
錨指的是一個選區的起始點。當我們使用鼠標選擇一個區域的時候,錨點就是我們鼠標按下瞬間的那個點。在用戶拖動鼠標時,錨點是不會變的。

焦點(focus)
選區的焦點是該選區的終點,當您用鼠標框選一個選區的時候,焦點是你的鼠標松開瞬間所記錄的那個點。隨着用戶拖動鼠標,焦點的位置會隨着改變。

范圍(range)
范圍指的是文檔中連續的一部分。一個范圍包括整個節點,也可以包含節點的一部分,例如文本節點的一部分。用戶通常下只能選擇一個范圍。“范圍”會被作為range對象返回。Range對象也能通過DOM創建、增加、刪減。

屬性
anchorNode
返回該選區起點所在的節點

anchorOffset
返回一個數字,表示該選區起點在anchorNode中的位置偏移量。

如果 anchorNode 是文字節點,那么返回的就是從該文字節點的第一個字開始,直到被選中的第一個字之間的字數(如果第一個字就被選中,那么偏移量為零)
如果 anchorNode 是一個元素,那么返回的就是在選區第一個節點之前的同級節點總數。(這些節點都是 anchorNode 的子節點)
focusNode
返回該選區終點所在的節點。

focusOffset
返回一個數字,表示該選區終點在focusNode中的位置偏移量。

如果 focusNode 是文字節點,那么選區末尾未被選中的第一個字,在該文字節點中是第幾個字(從0開始計),就返回它。
如果 focusNode 是一個元素,那么返回的就是在選區末尾之后第一個節點之前的同級節點總數。
isCollapsed
返回一個布爾值,用於判斷選區的起始點和終點是否在同一位置。

rangeCount
返回一個數字,表示該選區所包含的連續范圍的數量。一般為1,因為通常情況下用戶只能選擇一個范圍。

方法
getRangeAt
返回選區開始的節點(Node)。
因為通常情況下用戶只能選擇一個范圍,所以只有一個選區(range),此方法一般為getRangeAt(0)

collapse(光標落在的目標節點, offset)
將當前的選區折疊為一個點

extend
將選區的焦點移動到一個特定的位置。

modify
修改當前的選區。

collapseToStart
將當前的選區折疊到起始點。

collapseToEnd
將當前的選區折疊到最末尾的一個點。

selectAllChildren
將某一指定節點的子節點框入選區

addRange
一個區域(Range)對象將被加入選區。

removeRange
從選區中移除一個區域。

removeAllRanges
將所有的區域都從選區中移除。

deleteFromDocument
從頁面中刪除選區中的內容。

selectionLanguageChange
當鍵盤的朝向發生改變后修改指針的Bidi優先級。

toString
返回當前選區的純文本內容。


containsNode
判斷某一個node是否為當前選區的一部分。

所以現在就可以明白為什么同樣選中一段文字,Selection對象不一樣了吧?
用戶可能從左到右(與文檔方向相同)選擇文本或從右到左(與文檔方向相反)選擇文本。anchor指向用戶開始選擇的地方,而focus指向用戶結束選擇的地方。
————————————————
版權聲明:本文為CSDN博主「xiao xu」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_42420703/article/details/84892528


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM