【Javascript】iOSでblur時にSelection.rangeCountが取得できなかったときに調べたこと
今回やりたかったのはfocusが外れるときの要素を保存しておき、再びfocusがセットされるときにカーソル位置を戻すということ
試したのはこんなコード
<div id="editor" contenteditable="true"></div>
<input type="button" id="restore-range" value="restore range" />
<script>
var saveRange
$('#editor').on('blur', function() {
var s = window.getSelection()
if (0 < s.rangeCount) {
saveRange = s.getRangeAt(0)
}
})
$('#restore-range').on('click', function() {
if (saveRange) {
var s = window.getSelection()
if (0 < s.rangeCount) {
s.removeAllRanges()
}
s.addRange(range)
}
})
</script>PC版のChromeやAndroid端末では期待通りに動くものの、iOS では s.rangeCount の部分が0のため動かず。
iOSではwindow.getSelection().rangeCount や getRangeAtが使えないのかと困っていたが以下のコードだとちゃんと取得できる。
$('#editor').on('mousedown mouseup keydown keyup', function() {
var s = window.getSelection()
if (0 < s.rangeCount) {
range = s.getRangeAt(0)
}
})きっとblurの前に更新されてしまうのだろうという想像。どのタイミングがベストかわからないけどとりあえず上記のコードでやりたいことはできるかな。以上です