TinyMCE 4 - 获得插入位置

时间:2013-08-07 13:59:02

标签: javascript tinymce editor tinymce-4

我想在Tiny MCE 4中获得插入位置,但我不想获得行/列号 - 我想获得以像素为单位的位置(x& y dimmension)。它可以是任何东西。 最后一件事 - 我想这样做而不在内容中创建任何额外的标签,比如书签。 TinyMCE有办法做到这一点吗?或者是否可以选择以像素为单位获取书签位置,然后将其删除?

感谢您的回复

1 个答案:

答案 0 :(得分:10)

好的,我找到了。

首先,您必须获取tinymce.Editor类var editor = new tinymce.Editor(); //or another way, like tinyMCE.activeEditor

的实例

接下来获取tinyMCE小部件的jQuery位置:

var tinymcePosition = $(editor.getContainer()).position();
var toolbarPosition = $(editor.getContainer()).find(".mce-toolbar").first();

现在获取您当前正在编辑的HTML节点的位置:

var nodePosition = $(editor.selection.getNode()).position();
var textareaTop = 0;
var textareaLeft = 0;

我们有Y轴位置(通过nodePosition.top),是时候得到X:

if (editor.selection.getRng().getClientRects().length > 0) {
    textareaTop = editor.selection.getRng().getClientRects()[0].top + editor.selection.getRng().getClientRects()[0].height;
    textareaLeft = editor.selection.getRng().getClientRects()[0].left;
} else {
    textareaTop = parseInt($($this.selection.getNode()).css("font-size")) * 1.3 + nodePosition.top;
    textareaLeft = nodePosition.left;
}

相对于TinyMCE编辑器窗口(textarea),我们有textareaTop && textareaLeft个插入符号位置。现在是时候相对于整个页面(浏览器窗口)获取位置了:

var position = $(editor.getContainer()).offset();
var caretPosition = {
    top:  tinymcePosition.top + toolbarPosition.innerHeight() + textareaTop,
    left: tinymcePosition.left + textareaLeft + position.left
}

解决方案基于autocomplete plugin for TinyMCE 3,并根据我在TinyMCE 4中的需求进行了调整。

相关问题