我使用CKEditor的一个实例,我能够在光标点的CKEditor中插入文本。我希望能够将光标左侧的所有文本都抓到行的开头。
我已经尝试找到光标的X,y坐标并且没有帮助。我对所有CKEDITOR的工具充满信心,这可以做到,但我无法找出使用哪些工具来使其发挥作用。
var theEditor = CKEDITOR.instances.editorFull;
sel = theEditor.getSelection();
obj = sel.getStartElement().$;
range = theEditor.getSelection().getRanges();
container = range[0].startContainer.$;
textlen = typeof obj.textContent === "undefined" ? obj.innerText.length : obj.textContent.length;
offset = range[0].startOffset;
if(container.nodeType === 3) {
while (container.previousSibling) {
container = container.previousSibling;
if(container.length) {
offset += container.length;
}else{
offset += container.textContent ? container.textContent.length : container.innerText.length;
}
}
}
var pct = textlen > 0 ? offset / textlen : 0;
cursor = Math.floor(obj.offsetHeight * pct);
while (obj.offsetParent) {
cursor += obj.offsetTop;
obj = obj.offsetParent;
}
cursor += obj.offsetTop;
alert(cursor);
这是我试图找出光标所在的位置并且有效,但我不确定我在警报中收到了哪些信息,因此对我来说无法使用。
我想要的是这个假设。在下面的文字中使用|作为光标,这将在我的CDEditor实例中找到:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ex nunc,
tincidunt id |arcu in, semper volutpat nulla. Nunc efficitur egestas magna
vitae consequat.
注意| in" id | arcu"。我希望能够抓住文本" tincidunt id"基于光标位置。我不希望它从该文本上方的行尾抓取任何内容。基本上,停止自动换行。
有什么想法吗?感谢。
阿伦
答案 0 :(得分:2)
这是一个非常棘手的术语&#34; line&#34;用过的。如果编辑器的几何图形发生更改(调整大小)并且文本在某个不同的点处换行,该怎么办?如果选择在表格单元格中,行等于表格行那么该怎么办?如果<p>
被<br>
拆分并且有2&#34;虚拟段落&#34 ;?
HTML中没有行。内联元素(如<span>
或<strong>
)和块(如<p>
或<table>
)。要从最近的祖先块的开头到插入符号的位置获取HTML内容,您只需要:
var e = CKEDITOR.instances.editor1;
var r = e.getSelection().getRanges()[ 0 ];
r.collapse( 1 );
r.setStartAt( ( r.startPath().block || r.startPath().blockLimit ).getFirst(), CKEDITOR.POSITION_AFTER_START );
var docFr = r.cloneContents();
console.log( docFr.getHtml() );
console.log( docFr.$.textContent );