Я публикую неполное и грязное ответ на ваш вопрос, как вы просили его в комментариях:
function getCaretCharacterOffsetWithin(element) {
var caretOffset = 0;
var doc = element.ownerDocument || element.document;
var win = doc.defaultView || doc.parentWindow;
var sel;
if (typeof win.getSelection != "undefined") {
sel = win.getSelection();
if (sel.rangeCount > 0) {
var range = win.getSelection().getRangeAt(0);
var preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
caretOffset = preCaretRange.toString().length;
}
} else if ( (sel = doc.selection) && sel.type != "Control") {
var textRange = sel.createRange();
var preCaretTextRange = doc.body.createTextRange();
preCaretTextRange.moveToElementText(element);
preCaretTextRange.setEndPoint("EndToEnd", textRange);
caretOffset = preCaretTextRange.text.length;
}
return caretOffset;
}
$(document).ready(function() {
$('#summernote').summernote({
callbacks: {
onKeydown: function(e) {
const editable = document.getElementsByClassName('note-editable')[0]
const pos = getCaretCharacterOffsetWithin(editable)
console.log(pos)
const codable = document.getElementsByClassName('note-codable')[0]
codable.setSelectionRange(pos,pos)
}
}
})
$('#summernote').summernote('fullscreen.toggle');
});
Кредиты для getCaretCharacterOffsetWithin
переходит к Tim Down
getCaretCharacterOffsetWithin()
получает позицию каретки в .note-editable
, но не совсем верно, и значение даже не соответствует, когда вы перемещаетесь по границам абзаца взад и вперед (как Тим предупреждает в своем первоначальном сообщении).
setSelectionRange(pos,pos)
отражает положение в .note-editable
до .note-codable
.
Также
- Вам необходимо переключиться на
code view
и обратно, прежде чем он начнет работать. И каким-то образом решить эту проблему. - Вам нужно будет установить обратные вызовы мыши и Ко для отражения положения каретки при щелчках мыши и т. Д. c. Теперь он работает только на
onKeydown
. - . Вам нужно будет прокрутить до позиции каретки в
textarea
Здесь https://js-pvbgkh.stackblitz.io