我正在为TinyMCE开发一个插件。过程应该是这样的:
1)用户选择一些文本
2)他按下了我的自定义插件的工具栏按钮
3)执行一个自定义函数,该函数对选定文本执行自定义操作,例如,假设它用下划线标记包围选定文本:<u></u>
4)执行该操作后,所选文本将被插回进行选择的编辑器中
5)现在,不管所选文本是什么,我都使用编辑器的所有HTML并根据需要对其进行修改,例如向HTML中的每个标记添加自定义属性
6)有了新的HTML之后,我想把它插回到编辑器中
7)此外,选定的文本在过程结束时仍应突出显示
我正在努力完成步骤4-7。
我的问题分为2步:
A)我得到了选中的文本,我可以修改它。问题是我不知道如何将它设置回整个编辑器的文本。在插件中我知道:
var newSelectionHTML = ed.selection.getContent();
但是,如何使用newSelectionHTML更新编辑器文本的选定部分
B)我不知道如何修改整个编辑器的HTML并将其设置到编辑器中,同时保持用户选择。
ed.setContent(newHTML)
这样做会删除用户选择并将光标移到开头。如何在整个过程中保存用户选择(步骤1-7)?
先谢谢你了阿萨夫
3条答案
按热度按时间bfnvny8b1#
@jnoreiga的回答几乎就是我的答案,因为tinymce似乎需要一个Range类型的对象,它不接受普通对象
originalRange
我只需再次调用
getRng
,将其存储到一个新变量中,并使用originalRange
属性设置该变量的属性oug3syen2#
当对话框第一次打开时,使用克隆存储你的范围
字符串
然后当你想回到原来的选择
wbrvyc0a3#
不用
jQuery.extend
,只要调用范围的cloneRange
方法,得到的范围可以直接在setRng
中使用。