Получить каретную позицию в CKEditor - PullRequest
0 голосов
/ 10 мая 2019

У меня есть CKEditor в моем шаблоне (к сожалению, я не решил использовать что-то еще для этого), из которого мне нужно вставить предварительно определенную строку в существующий текст в теле в текущей позиции каретки. Я не могу найти хороший способ получить должность, и любой другой поддержки по этому вопросу недостаточно.

Кто-нибудь знает, как это возможно?

Компонент

template = new Template() // eventually gets set
@ViewChild("cke-editor-name") editor: ElementRef;
insertText(string) {
    var caretPos = ???;
    template.BodyHtml = template.BodyHtml.substr(0, caretPos) + string + template.BodyHtml.substr(caretPos, string.length());
}

1 Ответ

0 голосов
/ 13 мая 2019

Наконец-то нашел способ, который хорошо работает для меня в каждом браузере.

getCaretPos(){
    let sel = window.getSelection();
    let range;
    if (typeof document.caretPositionFromPoint !== "undefined") {
      var e = sel
        .getRangeAt(0)
        .cloneRange()
        .getBoundingClientRect()[0];
      range = document.caretPositionFromPoint(e.clientX, e.clientY);
    } else if (sel && sel.rangeCount > 0) {
      range = sel.getRangeAt(0);
    }
    if (!range) return;
    var caretPos = range.startOffset;
    return caretPos;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...