JavaScriptにおけるRangeオブジェクトとSelectionオブジェクトの使いかたとして、次の2つのケースを書いておく。
- 選択範囲のテキストを取得する
- 指定したノードを選択状態にする
1. 選択範囲のテキストを取得する
マウスで選択したテキストがアラートで表示される、という簡単な例題。
IE以外の場合
まずSelectionオブジェクトを取得して、そこからさらにRangeオブジェクトを取得する(それぞれ、getSelectionメソッドとgetRangeAtメソッドを使う)。RangeオブジェクトのtoStringメソッドで求めるテキストが得られる。
<p id="p">foo bar baz</p> <script type="text/javascript"> document.getElementById('p').onmouseup = function(){ var range = window.getSelection().getRangeAt(0); alert(range.toString()); } </script>
Windows7のFirefox, Chrome, Safariで期待通りに動作した。
IEの場合
考え方は同じだが、使用するメソッドが異なる。
- Selectionオブジェクト … documentオブジェクトのselectionプロパティ
- Rangeオブジェクト(IEの場合はTextRangeオブジェクトと言う) … SelectionオブジェクトのcreateRangeメソッド
- テキスト … TextRangeオブジェクトのtextプロパティ
<p id="p">foo bar baz</p> <script type="text/javascript"> document.getElementById('p').onmouseup = function(){ var range = document.selection.createRange(); alert(range.text); }; </script>
2. 指定したノードを選択状態にする
HTMLの中の任意の要素を選択状態(明暗が反転した状態)にする、という簡単な例題。
IE以外の場合
SelectionオブジェクトのselectAllChildrenメソッドを使う。引数として渡した要素が、子要素を含めて選択状態になる。
<p id="p">foo bar baz</p> <script type="text/javascript"> window.getSelection().selectAllChildren(document.getElementById('p')); </script>
これもWindows7のFirefox, Chrome, Safariで期待通りに動作した。
IEの場合
IEの場合は、Selectionを使わない。
まずはTextRangeオブジェクトを生成し、それが指定の要素を含むようにmoveToElementTextメソッドを実行する。さらにselectメソッドを実行して、要素を選択状態にする。
<p id="p">foo bar baz</p> <script type="text/javascript"> var range = document.body.createTextRange(); range.moveToElementText(document.getElementById('p')); range.select(); </script>
とりあえず以上。テキストの追加、削除、比較などについてはリファレンスを参考に。
0 件のコメント:
コメントを投稿