【JScript】IEでTextRangeを使用する場合の注意
TextRangeでは範囲内に<br />などが有る場合は改行とみなされますが、これが含まれる場合には、
- TextRange.moveStart('character', N)/TextRange.moveEnd('character', N)で選択範囲を移動する場合には、Nには改行を1文字とみなした数値を指定する必要がある。
- TextRange.text.lengthで取れるテキスト長は、改行を[CR][LF]の2文字とみなして計算されている模様。
また、範囲中、最後の文字(改行以外)よりも後の改行文字数は、lengthに含まれない。
従って、moveEndの挙動と矛盾する……(__;)/。
- TextRange作成時・要素選択時に、
var TextRange=document.body.createRange();で対象要素を選んだ後、
TextRange.moveToElementText(element);
TextRange.setEndPoint('EndToStart',TextRange);のようにして、一旦、範囲をオブジェクトの先頭・length=0にリセットした後、改行が1文字と見なされることに注意しつつ、moveStart/moveEndで範囲を調整する。
- moveStart/moveEndでは、正方向の移動に限る。負方向への移動は使用しない。
- TextRange.text.lengthの値はそのままでは使わない。
moveStart/moveEnd("character")で指定出来るオフセットの最大値を求めたい場合は、var text=TextRange.text.replace(/\r\n/g,'\n');として改行を1文字としたあとでtext.lengthを使用する。
上記に関連する内容が詳細に書かれた、ためになるページを見つけました。
Studio FREE-SKY - テキストエリアの選択範囲の位置を特定する上で、選択位置を先頭・length=0にリセットするのに、
2008/11/13(木) 08:56 | 固定リンク
| 記事の編集(管理者用)
「パソコン・インターネット」カテゴリの記事
- 動けるものも久しからず(2012.02.15)
- 5年以上も気付かない振り(2012.02.14)
- 探しものって、みつけにくいものですね…(2012.02.13)
- Norton Internet Securityでエラー: 「3043,1」(2011.07.13)
- アンケート:ブログ等で「続きを読む」リンクを見たら…(2010.11.05)
「覚書」カテゴリの記事
- 動けるものも久しからず(2012.02.15)
- Norton Internet Securityでエラー: 「3043,1」(2011.07.13)
- 終わりを惜しむ6タイトル(2010.12.19)
- ココでも:ココログ広場ユーザーのブログをキーワードで検索するサービスを試作(2010.10.29)
- ココログ用ReadMore:トップページの『》 続きを読む』をその場で展開するスクリプト(2010.11.06)

