CKEditor在同一行上获取Preceding Text

时间:2015-07-16 23:59:09

标签: javascript dom ckeditor

我使用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"基于光标位置。我不希望它从该文本上方的行尾抓取任何内容。基本上,停止自动换行。

有什么想法吗?感谢。

阿伦

1 个答案:

答案 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 );