4

我正在安装新的 TinyMCE 4。编辑器是一个简单的内联 DIV,只允许斜体和粗体(清理设置为删除大多数其他标签)。

tinymce.init({
    inline: true,

    // we only want simple bold and italic controls
    toolbar: "undo redo | bold italic", 

    invalid_elements : "span,u,a,ul,ol,li,h1,h2,h3,h4,h5,h6,blockquote,strikethrough",
    ...

我的问题:我想每隔几次击键就通过 ajax 将编辑器的内容保存回我的数据库。

为了运行清理,我首先保存内容:

tinyMCE.triggerSave();  

然后将清理后的内容发送回我的数据库——当然,这会适当地捕获代码炸弹等:)

var strData = tinymce.activeEditor.getContent() ;

这一切都很好,只是回到编辑器中,光标返回到内容的开头

我以为我可以通过在保存之前设置书签来返回正确的位置:

// set bookmark
var bm = tinymce.activeEditor.selection.getBookmark();

// save and cleanup, then ajax
tinyMCE.triggerSave(); 
...ajax stuff here

// Restore the selection bookmark
tinymce.activeEditor.selection.moveToBookmark(bm);

但这似乎不起作用。

我还认为我可以在保存之前捕获当前节点和偏移量:

var nd = tinymce.activeEditor.selection.getNode();
var os = tinymce.activeEditor.selection.getRng().startOffset;

并通过以下方式返回正确的点:

tinymce.activeEditor.setCursorLocation(nd, os);

但这会产生错误,因为 nd 显然不是有效的节点对象。

这是因为我的“选择”实际上是一个长度为零的字符串(它是一个光标点,而不是一个选择)?

恐怕我在使用 API 4 的官方文档时遇到了一些困难,它不像 API 3 的文档那样“充实”(我猜是因为它是最近的更新)。

我可以在 Stackoverflow(和一般的谷歌搜索)上找到的大多数帮助和示例都与 API 3 相关(这似乎是一个完全不同的野兽)。

如果我想要的是可能的,谁能告诉我?

4

1 回答 1

7

嗯,您可以使用非 html 书签:

// set bookmark
var bm = tinymce.activeEditor.selection.getBookmark(2,true);

// save and cleanup, then ajax
tinyMCE.triggerSave(); 
...ajax stuff here

// Restore the selection bookmark
tinymce.activeEditor.selection.moveToBookmark(bm);
于 2013-05-28T14:14:38.937 回答