Я хотел бы иметь возможность конвертировать текущую позицию мыши в диапазон, в частности, в CKEditor.
CKEditor предоставляет API для установки курсора в соответствии с диапазоном:
var ranges = new CKEDITOR.dom.range( editor.document );
editor.getSelection().selectRanges( [ ranges ] );
Поскольку CKEditor предоставляет этот API, проблему можно упростить, удалив это требование и просто найдя способ создания диапазона от координат мыши по div, содержащему различные элементы HTML.
Однако это не то же самое, что преобразование координаты мыши в позицию курсора в текстовом поле, поскольку в текстовых средах есть фиксированные ширины столбцов и высоты строк, где CKEditor отображает HTML через iframe.
Основываясь на этом, похоже, что диапазон может применяться к элементам.
Как бы вы определили диапазон начала и конца, который ближе всего к текущей позиции мыши?
Изменить: Пример того, как можно использовать API-интерфейс ckeditor для выбора диапазона в событии mouseup.
editor.document.on('mouseup', function(e) {
this.focus();
var node = e.data.$.target;
var range = new CKEDITOR.dom.range( this.document );
range.setStart(new CKEDITOR.dom.node(node), 0);
range.collapse();
var ranges = [];
ranges.push(range);
this.getSelection().selectRanges( ranges );
});
Проблема с приведенным выше примером заключается в том, что целевой объект node (e.data. $. target) запускается только для таких узлов, как HTML, BODY или IMG, но не для текстовых узлов. Даже если бы это было так, эти узлы представляли фрагменты текста, которые не поддерживали бы установку курсора на позицию мыши внутри этого фрагмента текста.