contentEditable 要素 (p、div など) があり、その中のキャレット (カーソル) 位置を取得したいと考えています。通常、次のコードでそれを実現できます。
var position = window.getSelection().getRangeAt(0).startOffset;
要素にテキストのみが含まれている場合、これは正常に機能します。ただし、要素に HTML 書式が含まれている場合、返される位置は、含まれている HTML 要素内のキャレット位置を基準にしています。
contentEditable 要素の内容がこれであると仮定しましょう:
AB<b>CD</b>EF
キャレットが の中<b></b>
にある場合、たとえば C と D の間にある場合、上記のコードで返される位置は 3 ではなく 1 です (contentEditable 要素のコンテンツの先頭から数えます)。
誰でもこれに対する解決策を思い付くことができますか?