Я создал плагин для Suneditor, который интегрирует кнопку Emoji. Идея состоит в том, чтобы вставить смайлик туда, где находится курсор, а затем удерживать курсор в той же позиции (после вновь вставленного смайлика). Но у меня возникает проблема: курсор сбрасывается в начало документа, что ужасно UX. Есть идеи, как не допустить перехода курсора в начало? https://jsfiddle.net/na3yxb51/4/
Я просмотрел документацию, но не смог найти много информации о размещении курсора.
action: function (core) {
const editor = this;
function handleEmoji(emoji) {
const tag = editor.util.createElement("span");
tag.textContent = emoji;
editor.insertNode(tag, null);
picker.off('emoji', handleEmoji);
};
picker.on('emoji', handleEmoji);
picker.togglePicker(document.querySelector('#emojianchor'));
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В Suneditor необходимо сохранить текущую позицию курсора перед вставкой смайлика, а затем восстановить ее позже, чтобы указатель не перешел в начало документа. Для этого можно использовать методы Suneditor core.saveRange() и core.restoreRange().
Вот модифицированная версия вашего плагина для правильной обработки положения курсора:
action: function (core) {
const editor = this;
function handleEmoji(emoji) {
core.saveRange();
const tag = editor.util.createElement("span");
tag.textContent = emoji;
editor.insertNode(tag, null);
core.restoreRange();
core.focus();
picker.off('emoji', handleEmoji);
};
picker.on('emoji', handleEmoji);
picker.togglePicker(document.querySelector('#emojianchor'));
}
В этом коде:
Это должно предотвратить переход курсора в начало документа при вставке смайлика.
Решение: https://jsfiddle.net/r7p92m8d/1/
function resetCursorPos() {
const core = editor.core;
const editorNode = core.context.element.wysiwyg;
const lastChild = editorNode.lastChild;
const range = document.createRange();
const selection = window.getSelection();
setTimeout(function() {
range.setStartAfter(lastChild);
range.collapse(true);
selection.removeAllRanges();
selection.addRange(range);
editor.core.focus();
}, 100);
}
Эти методы, похоже, не существуют, когда я пытаюсь реализовать их в скрипке.