Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CKEditor在同一行上获取前面的文本_Javascript_Dom_Ckeditor - Fatal编程技术网

Javascript CKEditor在同一行上获取前面的文本

Javascript CKEditor在同一行上获取前面的文本,javascript,dom,ckeditor,Javascript,Dom,Ckeditor,我使用了CKEditor的一个实例,并且我能够在CKEditor中的光标点插入文本。我希望能够抓取光标左侧到行首的所有文本 我试着找到光标的X,y坐标,但没有用。我相信,有了所有的CKEDITOR工具,这是可以做到的,但我还没有弄清楚应该一起使用哪些工具来实现它 var theEditor = CKEDITOR.instances.editorFull; sel = theEditor.getSelection(); obj = sel.getStartElement().$; range =

我使用了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. 
注意“id | arcu”中的|。我希望能够根据光标位置抓取文本“tincidunt id”。我不希望它从文本上方的行尾抓取任何内容。基本上,停止在字包装

有什么想法吗?谢谢

艾伦

这是一个相当棘手的术语“线”。如果编辑器的几何图形更改(调整大小)并且文本在某个不同点换行,该怎么办?如果选择在表格单元格中,行是否等于表格行?如果

分割,并且有两个“虚拟段落”,该怎么办

HTML中没有行这样的东西。有内联元素(如
)和块(如
)。要获取从最接近的祖先块开始到插入符号位置的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 );

是否需要将光标向左移动1个字符/字母,并检查光标的x、y位置,直到y值改变为止,这意味着光标何时进入下一行,因为此时文本已格式化?或者,经过仔细考虑,我需要抓取文本的原因是确定光标与元素左侧之间的距离。如果我能得到x,y,我相信x值会告诉我我有多远,或者这只是当前窗口左上角的相对值?console.log做什么?@j_allen_morris:如果你问一个基本问题,比如什么
console.log
,这意味着你根本没有使用过谷歌吗。请先搜索,然后询问。