我的模板中有一个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());
}
答案 0 :(得分:0)
最后找到了一种对每个浏览器都适用的方法。
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;
}