Ckeditor 获取范围的位置

Ckeditor 获取范围的位置,ckeditor,Ckeditor,我需要能够获得页面上插入符号的坐标(如闪烁的光标行)。这样做的目的是,我将覆盖一个类似于工具提示的元素,该元素的绝对位置看起来像是在插入符号下面出现的工具提示 在此运行之前,我已经从选择中获取了范围(CKEDITOR.dom.range),并且该范围始终处于折叠状态,因此我正在编写的方法需要获取折叠范围的位置 这就是我到目前为止所做的: /** * Get the position of a range * * @param {CKEDITOR.dom.range} range

我需要能够获得页面上插入符号的坐标(如闪烁的光标行)。这样做的目的是,我将覆盖一个类似于工具提示的元素,该元素的绝对位置看起来像是在插入符号下面出现的工具提示

在此运行之前,我已经从选择中获取了范围(CKEDITOR.dom.range),并且该范围始终处于折叠状态,因此我正在编写的方法需要获取折叠范围的位置

这就是我到目前为止所做的:

/**
 * Get the position of a range
 *
 * @param   {CKEDITOR.dom.range}    range   The range (i.e. indicating where the caret is)
 * @returns {void}
 */
this.getRangePosition = function( range ){

    /* Start with wherever we are scrolled to */
    var top = (window.pageYOffset || document.documentElement.scrollTop)  - (document.documentElement.clientTop || 0);
    var left = (window.pageXOffset || document.documentElement.scrollLeft) - (document.documentElement.clientLeft || 0);

    /* Figure out where the containing element (usually the <p>) is and add that's position on */
    var containingElement = range.startContainer.getParent(); // We know range range.startContainer is always text so getParent() takes us to the element 
    var rect = containingElement.getClientRect();
    top += rect.top + rect.height;
    left += rect.left;

    /* And then figure out how far along we are... */

};
/**
*获取范围的位置
*
*@param{CKEDITOR.dom.range}range范围范围(即指示插入符号的位置)
*@returns{void}
*/
this.getRangePosition=函数(范围){
/*从滚动到的位置开始*/
var top=(window.pageYOffset | | document.documentElement.scrollTop)-(document.documentElement.clientTop | | 0);
var left=(window.pageXOffset | | document.documentElement.scrollLeft)-(document.documentElement.clientLeft | 0);
/*找出包含元素(通常是)的位置,并将其添加到*/
var containingElement=range.startContainer.getParent();//我们知道range.startContainer始终是文本,因此getParent()将我们带到元素
var rect=containingElement.getClientRect();
顶部+=垂直顶部+垂直高度;
左+=矩形左;
/*然后看看我们有多远*/
};
问题是我不知道如何从那里弄清楚该怎么办。我现在得到的是正确的top值,而不是left值,因为我不确定距离元素外部有多远


关于如何实现这一点,我有什么想法吗?

对于其他遇到这一点的人,我最终做了以下几点:

  • 为当前选择创建编辑器快照和书签
  • 插入一个元素,然后在该tp上使用jQuery的.offset()方法计算位置
  • 恢复快照(不含该元素)和选择书签

    var snapshot = editor.getSnapshot();
    var bookmarks = editor.getSelection().createBookmarks2( true );
    var fakeElement = new CKEDITOR.dom.element( 'span' );
    editor.insertElement( fakeElement );
    var position = $(fakeElement.$).offset();
    editor.loadSnapshot( snapshot );
    editor.focus();
    editor.getSelection().selectBookmarks( bookmarks );