私は2つの非常に基本的なことを行う方法を探しています。テキスト内のキャレットの位置を取得したいだけです。次に、テキスト内の特定の位置にキャレットを配置します。目的は、プログラムでテキストを変更できるようにすることです。CKEditor 4:カーソル/キャレットの位置を取得および設定する方法は?
私は、さまざまな似たようなことをしようとしていたが、私が望んでいないものをたくさん見つけました。実際、ほとんどのソリューションは、範囲とDOM要素を見つけるHTMLを探しています。たぶんそれが行く方法ですが、私は実際の解決策を見つけていません。
カーソル位置の確認。私は、さまざまなソース(例えばthis one)から、次の解決策が見つかりました:
var selection = e.editor.getSelection();
var range = selection.getRanges()[0];
var cursor_position = range.startOffset;
をしかし、これは私の問題に応答しません。以下のテキストでは:
アップル
射手
アクセント
カーソルが直接、各単語のAの後に連続して置かれている場合、それは1が毎回返されます。私が望むのは、1番目のAの後に1を、2番目のAの後に6を、3番目の後に13を配置することです。
つまり、テキスト内のどの文字位置がカーソルであるのかが重要です。たとえば、テキストのX番目の文字の後にテキストを挿入することができます。
あなたはCKEditorバージョンでブックマークのようなものを実装してみたいが、より耐久性のあるかもしれません、あなたの最後のコメントを見てみると
カーソル位置を取得するには、選択範囲と範囲で再生する必要があります。ただし、** CKEditorはHTMLを背景**で使用し、プレーンテキストではないため、1,6,13の結果が得られないことに注意してください。あなたの仕事が、HTMLを無視して痛みのテキストにカーソル位置を戻すことであるならば、多くの苦境に陥ることがあるので、多くの不満と苦痛のために準備をしてください。 –
こんにちは@ j.swiderski、あなたの答えに感謝します。実際には、私は予想される結果に達するほど長い範囲と選択肢で遊んでも構いません。しかし、これまでのところ、私はどのように見えません。私はその結果を文字数で説明しましたが、 "Row1/Range3/Offset4"と記述された位置を持つのと同じです。単語の中の手紙 ")。与えられたコード例のような範囲だけでは十分ではないようです。 – Xosted
https://dom.spec.whatwg.org/#interface-rangeと古いものはhttps://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Levelをご覧ください。それはIMHOの良い例とより良い定義を持っているので、-2 - 範囲 - 導入。一般に、各範囲は、開始ノード(startContainer)と、その開始ノード内のオフセットとを有する。 **オフセットはstartContainer **に関連しており、ドキュメント全体の位置は示されません。 AppleまたはArchersのいずれかで折りたたみ選択があった場合など。 '
A^pple
A^rchers
' 'オフセットは段落(範囲startContainer)に関連しています。体。 –