Javascript TinyMCE-选择文本、更改文本、更新编辑器并恢复选择

Javascript TinyMCE-选择文本、更改文本、更新编辑器并恢复选择,javascript,html,tinymce,range,wysiwyg,Javascript,Html,Tinymce,Range,Wysiwyg,我正在为TinyMCE开发一个插件。这个过程应该是这样的: 1) 用户选择一些文本 2) 他按下了我的自定义插件的工具栏按钮 3) 执行一个自定义函数,对所选文本执行自定义操作,例如,假设它用下划线标记包围所选文本: 4) 执行该操作后,所选文本将插入到进行选择的编辑器中 5) 现在,不管选择的文本是什么,我都会获取所有编辑器的HTML,并根据需要对其进行修改,例如为HTML中的每个标记添加一个自定义属性 6) 有了新的HTML,我想把它插回到编辑器中 7) 此外,所选文本仍应在流程结束时突出显

我正在为TinyMCE开发一个插件。这个过程应该是这样的:

1) 用户选择一些文本

2) 他按下了我的自定义插件的工具栏按钮

3) 执行一个自定义函数,对所选文本执行自定义操作,例如,假设它用下划线标记包围所选文本:

4) 执行该操作后,所选文本将插入到进行选择的编辑器中

5) 现在,不管选择的文本是什么,我都会获取所有编辑器的HTML,并根据需要对其进行修改,例如为HTML中的每个标记添加一个自定义属性

6) 有了新的HTML,我想把它插回到编辑器中

7) 此外,所选文本仍应在流程结束时突出显示

我正在努力完成步骤4-7。

我的问题分为两个步骤:

A) 我得到选定的文本,我可以更改它。问题是我不知道如何将它设置回整个编辑器的文本。在插件中,我执行以下操作:

var newSelectionHTML = ed.selection.getContent();
但是如何使用newSelectionHTML更新编辑器文本的选定部分

B) 我不知道如何更改整个编辑器的HTML并将其设置到编辑器中,同时维护用户选择

ed.setContent(newHTML)
执行此操作将删除用户选择并将光标移到开头。如何在整个过程中保存用户选择(步骤1-7)

先谢谢你。
当对话框第一次打开时,尽快使用克隆存储您的范围

originalRange = jQuery.extend(true, {}, editor.selection.getRng());
然后,当您要返回到原始选择时

editor.selection.setRng(originalRange);

@jnoreiga的回答几乎就是我的解决方案。由于tinymce似乎希望对象的类型为Range,因此它不会接受普通对象
originalRange

我只需再次调用
getRng
,将其存储到一个新变量中,并使用
originalRange
属性设置该变量的属性

var originalRange = jQuery.extend(true, {}, editor.selection.getRng());

/*
 * Do some logic,
 * Then set current range to originalRange
 */

var newRange = editor.selection.getRng();

newRange.startContainer = originalRange.startContainer;
newRange.startOffset = originalRange.startOffset;
newRange.startContainer = originalRange.endContainer;
newRange.startOffset = originalRange.endOffset;

editor.selection.setRng(newRange);

这几乎就是我的解决方案。因为tinymce似乎期望一个类型为Range的对象,所以它不会接受您的普通对象
originalRange
我只需要再次调用
getRng
,将其存储到一个新变量,并使用
originalRange
properties设置该变量的属性我正在执行类似的操作,但无法迭代该范围内所有选定的节点。您是否找到了这样做的方法,因为TinyMCE中的选择由于某种原因没有该功能