Как получить, а затем вставить со смещением TextNode в ContentEditable Div - PullRequest
1 голос
/ 06 мая 2020

Чего я пытаюсь достичь:

У меня есть contenteditable div (в частности, ни textarea, ни input). Когда пользователь редактирует содержимое этого div, он может оставить div и нажать кнопку в другом месте на странице, чтобы вставить диапазон (который содержит предопределенные китайские символы) в div. Мне нужен диапазон до go в div в точке выбора. На данный момент я предполагаю, что выбор будет происходить просто по последней позиции курсора.

То, что мне удалось до сих пор:

Я получил смещение символа каретки и сохранил его в другом месте на странице. Затем я взял смещение и попытался вставить его, используя range.insertNode. Однако я заметил, что смещение, которое я получал, было количеством символов, поэтому я получал сообщение об ошибке, говорящее, что на моем смещении нет узла.

Затем я прочитал это: https://javascript.info/selection-range <- Это заставило меня понять, что группы символов обрабатывались как «узлы». Итак, только что осознав, что мое смещение должно быть значением узла, я здесь, чтобы применить диапазон в нужном месте (я думаю, что это сработает): </p>

function insertAtOffset(parent, child, offset = 0){
            range = document.createRange();
            range.selectNode(parent);
            range.setStartBefore(parent.childNodes[offset]);
            range.insertNode(child);
        }

Однако я Я вернулся к исходной точке с точки зрения получения смещения узла для вставки.

Я думаю, что решение может быть связано с: var node = document.getSelection().anchorNode; который я взял из: Получить узел элемента в позиции курсора (в contentEditable) , но я не уверен, как получить смещение узла таким образом, чтобы это помогло с моей функцией ввода диапазона.

Specifi c вопрос:

Как мне получить узел смещение в текущей позиции курсора?

Я буду использовать несколько событий для сохранения этого местоположения, а затем вставлять в него, когда пользователь нажимает кнопку для китайского символа.

Примечание: я чувствую себя немного глубже во Front End, чем мне удобно. Поэтому я буду поддерживать любые ответы, которые предоставляют дополнительный контекст или информацию, которая способствует моему пониманию проблемы и / или решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...