То, что вы пытаетесь сделать, действительно сложно в браузере.В частности, я не знаком с ckeditor, но обычный javascript позволяет вам выбирать текст, используя диапазон, поэтому я не думаю, что он добавляет что-то особенное.Вы должны найти элемент браузера, который содержит щелчок, а затем найти символ в элементе, который был нажат.
Обнаружение элемента браузера является простым битом: вам нужно либо зарегистрировать свой обработчик на каждом элементе, либоиспользуйте поле назначения события.Там много информации об этом, задайте более конкретный вопрос о стекапровороте, если у вас возникли проблемы.
После того, как у вас есть элемент, вам нужно выяснить, какой символ внутри элемента был нажат, затем создайте соответствующий диапазон, чтобы поместить курсор туда.Как указывалось в сообщении, на которое вы ссылались, вариации браузера делают это действительно сложно.Эта страница немного устарела, но имеет хорошее обсуждение диапазонов: http://www.quirksmode.org/dom/range_intro.html
Диапазоны не могут сообщить вам свои позиции на странице, поэтому вам придется использовать другой метод, чтобы выяснить, какой биттекста нажали.
Я никогда не видел полного решения этого в javascript.Несколько лет назад я работал над одним, но я не нашел ответа, которым я был доволен (некоторые действительно сложные случаи).Подход, который я использовал, был ужасным хаком: вставьте интервалы в текст, затем используйте их для выполнения бинарного поиска, пока не найдете наименьший возможный интервал, содержащий щелчок мыши.Пролеты не изменяют макет, поэтому вы можете использовать свойства span_x / y пролета, чтобы выяснить, содержат ли они щелчок.
Например, предположим, у вас есть следующий текст в узле:
<p>Here is some paragraph text.</p>
Мы знаем, что клик был где-то в этом абзаце.Разделите абзац пополам с помощью интервала:
<p><span>Here is some p</span>aragraph text.</p>
Если диапазон содержит координаты щелчка, продолжайте двоичный поиск в этой половине, в противном случае ищите вторую половину.
Это прекрасно работает для одиночногострок, но если текст занимает несколько строк, сначала нужно найти разрывы строк, иначе они могут перекрываться.Вы также должны решить, что делать, когда щелчок мышью был не по любому тексту, а по элементу - например, после конца последней строки в абзаце.
Поскольку я работал над этимбраузеры стали намного быстрее.Теперь они, вероятно, достаточно быстрые, чтобы добавлять s вокруг каждого символа, затем вокруг каждых двух символов и т. Д., Чтобы создать двоичное дерево, которое легко искать.Вы могли бы попробовать этот подход - было бы намного проще определить, над какой линией вы работаете.
TL; DR, это действительно сложная проблема, и если есть ответ, он может не стоитьваше время, чтобы придумать это.