从 tinyMCE 中的插入符位置删除 x 个字符

Removing x number of characters from the caret position in tinyMCE

我正在开发一个项目,用户可以在其中输入特殊字符,然后按 Tab 键自动完成值。这部分主要是工作,但我希望能够从插入符号位置之前删除 x 个字符。 例如。如果 | 是插入符号并且我有以下文本 @chr|.

我希望能够删除光标位置前的3个字符,例如我最终会得到 @

我找到了一种使用以下代码获取当前光标位置的方法,但我还没有找到任何方法能够从该位置删除 x 个字符。

  function getCaretPosition()
        {
            var ed = tinyMCE.get('txtComment');     // get editor instance
            var range = ed.selection.getRng().startOffset;     // get range
            return range;
        }

您可以通过创建一个以当前插入符位置结束的 Range 来实现:

var ed = tinyMCE.get("mce_0"); // get editor instance
var editorRange = ed.selection.getRng(); // get range object for the current caret position

var node = editorRange.commonAncestorContainer; // relative node to the selection

range = document.createRange(); // create a new range object for the deletion
range.selectNodeContents(node);
range.setStart(node, editorRange.endOffset - 3); // current caret pos - 3 
range.setEnd(node, editorRange.endOffset); // current caret pos
range.deleteContents();

ed.focus(); // brings focus back to the editor

要使用演示,请将插入符号放在文本中的某个位置,然后单击顶部的 "Remove 3" 按钮删除前面的 3 个字符。

请注意,我的演示是简化的,没有进行任何边界检查。

演示:http://codepen.io/anon/pen/dWVWYM?editors=0010

兼容IE9+