0

これを使用してカウントを取得しています

var window.getSelection().getRangeAt(0).startOffset;

これは、これまでのところカウントを復元するために持っているものです。

var range = window.getSelection().getRangeAt(0);
range.setStart(dNode, dc);
range.insertNode (mcmsfinalLinkhandle);

カウントを保持するために localStorage を使用しています。これは退屈に思えるかもしれませんが、助けていただければ幸いです。これはエントリー レベルの JavaScript の問題であるはずなので、複雑な解決策なしでこれを実行できるはずです。これまでのところ、ノードや行ではなく文字ごとに配置し、挿入ポイントにキャレットを保持する機能だけが欠けています。助けてくれてありがとう。

4

3 に答える 3

0

残念ながら、答えは、ブラウザによって異なります。FF、Chrome、および Safari は同じインターフェースを使用していると思います。詳細については、https ://developer.mozilla.org/en/DOM/Range で調べてください。

IE と Opera は別のインターフェイスを使用していると思います: http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx

アドバイス: できれば、これを避けるようにしてください。既製の RTE エディターを使用するか、通常のテキスト領域のみを使用してください。

于 2012-06-12T23:12:52.687 に答える
0

で範囲を作成document.createRangeし、正しい場所に移動してから選択する必要があります。

ここに素晴らしい解決策があります https://stackoverflow.com/a/3866442/1450483

于 2012-06-12T23:13:51.823 に答える
0

まず、個別の Range API と Selection API があります。範囲は、ドキュメントの単一の連続したチャンクであり、必ずしも選択範囲に関連付けられているわけではありません。選択範囲から取得した範囲の変更が選択範囲に影響するかどうかはブラウザーによって異なります (Firefox は影響しますが、他のブラウザーは影響しません)。そのため、選択範囲を確実に更新するには、範囲を削除して追加する必要があります。

var sel = window.getSelection();
var range = sel.getRangeAt(0);
range.setStart(dNode, dc);
range.insertNode(mcmsfinalLinkhandle);
sel.removeAllRanges();
sel.addRange(range);

編集可能な要素の可視テキスト内の特定の文字オフセットにキャレットを移動することは自明ではなく、DOM Range API のすべてがテキストではなくノードを中心に展開し、編集中のテキストを決定するため、それを達成するためのコードはエントリーレベルからはほど遠いさまざまな CSS プロパティ ( displaywhite-spacevisibilityなど) を計算する必要があります。

私のRangyライブラリとその新しいTextRange モジュール( demo ) を使用して、キャレットと選択範囲を文字オフセットとして操作できます。

于 2012-06-13T08:57:56.643 に答える