divを使ったUIWebviewでリッチテキストエディタを作っていますcontentEditable
。キャレットの位置をピクセル単位で取得したい。私はたくさん検索しましたが、以下のコードを取得しました。
function getCaretClientPosition() {
var x = 0, y = 0;
var sel = window.getSelection();
if (sel.rangeCount) {
var range = sel.getRangeAt(0);
if (range.getClientRects) {
var rects = range.getClientRects();
if (rects.length > 0) {
x = rects[0].left;
y = rects[0].top;
}
}
}
return { x: x, y: y };
}
上記のコードは、改行を入力するまでうまく機能します。sel.getRangeAt(0)
null を返すため、関数は右キャレットの Y ピクセルを返すことができません。