在 CKEditor 中获取插入符位置
Get caret position in a CKEditor
我的模板中有一个 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());
}
终于找到了一种适用于所有浏览器的方法。
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;
}
我的模板中有一个 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());
}
终于找到了一种适用于所有浏览器的方法。
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;
}