【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の前に更新されてしまうのだろうという想像。どのタイミングがベストかわからないけどとりあえず上記のコードでやりたいことはできるかな。以上です