0

Rangy を使用して、カーソル位置を選択および復元しています。

これは優れた機能を果たしますが、ユーザー入力がプログラムによって操作され、DIV の innerHTML で短い文字列が置き換えられる場合には設計されていません。

ユーザーが選択範囲の最後にスペースを入力し、スペースがプログラムで削除されるとどうなるかを示す jsbin の例を作成しました: http://jsbin.com/ebeqoj/4/edit

置き換えられた innerHTML は、Rangy が復元しようとするものよりも短いため、復元に失敗し、DIV がフォーカスを失います。

これを処理する方法についての提案をいただければ幸いです。たとえば、新しい文字列の末尾にカーソルを戻すように Rangy に指示する方法はありますか? (私は rangy.getSelection().move("character", userInput2.length-1)成功せずに使用しようとしました)

ありがとう

4

1 に答える 1

2

のコンテンツの最後にキャレットを配置するの<div>は非常に簡単です。

var sel = rangy.getSelection();
sel.selectAllChildren(el);
sel.collapseToEnd();

<div>より一般的なケースでは、先頭からキャレット位置までのコンテンツを含む範囲を作成し、text()Rangy 範囲のメソッドを使用してそのテキストを取得し、そのテキストから空白を削除して、その長さを測定できます。デモ:

http://jsbin.com/ebeqoj/5/edit

于 2012-07-31T13:49:13.603 に答える