Open3
Selection API と Rangeインターフェイス:webブラウザで選択範囲やキャレット(入力カーソル)の位置を制御する
ピン留めされたアイテム
概念の整理
Range
(範囲): HTMLドキュメントの「一部分」を表現するオブジェクト
- あくまでドキュメントの一部分をプログラマブルに表現するためのインターフェイスであり、
Range
単体ではHTMLドキュメントの選択はできない - 範囲の境界点(開始点
start
と終了点end
)の単一ペアから構成される- 常に開始点より後ろに終了点が置かれる
- 境界点の位置は基本的にノード単位で指定する
- 文字列を含むノードの途中に境界点を置きたい場合には
Range.setStart(node, offset)
のようにノード先頭からの文字数をoffset
で指定する
- 文字列を含むノードの途中に境界点を置きたい場合には
Selection
(選択): HTMLドキュメントの「選択範囲」を表現するオブジェクト
-
window
あるいはdocument
に1つ紐付いていて、開いているページの選択範囲を管理している - 開いているページの
Selection
オブジェクトにRange
が追加されることで初めてHTMLドキュメントの一部が選択された状態が実現できる - 選択範囲の境界点(開始点
anchor
と終了点focus
)のペアを 複数持てる(仕様上)-
Selection.getRangeAt(i)
で「i
番目のRange
を取得する」といったメソッドを備えているのはそのため - とは言っても 複数選択をサポートしているブラウザは現状Firefoxのみ で、Chromeなどその他のブラウザでは
Selection
が持てる選択範囲の最大数は1
-
- ユーザーの選択方向によっては、開始点
anchor
の位置より前に終了点focus
が置かれることもある- 一方で
Range
は常に開始点start
より後ろに終了点end
が置かれるので注意
- 一方で