Это на самом деле не ответ, а понятия, о которых нужно подумать:
В contenteditable все состоит из узлов, как и все остальное в HTML, поэтому вы можете получить позицию узла, проблема в том, где вы находитесь в узле(если это текст, вы можете быть 100 символов внутри узла).Таким образом, вы должны сделать свои собственные односимвольные узлы.
Чтобы получить позицию, когда кто-то печатает, вам нужно захватить событие onkeypress, остановить пузырь распространения, взять символ, который он запрашивает, набить егов узле (может быть, промежуток аля "маркер"), а затем вставьте этот узел.Затем вы вычислите точную позицию этого промежутка / узла по смещению.
Возможно, вам придется удалить промежуток и заменить его только символом.
Также естьпроблема, с которой я столкнулся, когда вы связываетесь с всплывающими событиями, когда должна происходить прокрутка, каретка может выходить за пределы области просмотра.
Опционально, и это может быть немного лучшей идеей, чем возиться сраспространения, позволяют браузеру самостоятельно вставлять символ, затем сразу же вставлять символ юникода нулевой ширины (невидимый) в промежуток / узел до или после него и вместо этого вычислять его положение.Затем вытаскивайте маркеры либо на лету, либо когда они останавливают печать.
Да, это так грязно, извините.Если у кого-то есть способ получше, я весь в ушах.