我已经为tinyMCE创建了一个插件,可以使用MathJax在编辑器数学公式中插入。 此插件在iframe中打开一个弹出窗口(使用jQuery),然后启动一个触发器事件,以便在tinyMCE活动编辑器中插入输入的公式。
我的代码在Chrome& Firefox(创建插入textarea插入位置的pre
),但在IE中,文本插入textarea的开头。
我正在使用这样的setContent方法:
tinyMCE.activeEditor.selection.setContent(text to insert, {format: 'bbcode'});
我在插入之前尝试使用ed.focus()
,在StackOverflow中找到了其他建议,但没有任何效果。
另外,我尝试在打开弹出窗口之前保存插入位置,并在插入时恢复它,但无论如何都不起作用。
有什么想法吗?
提前致谢。
答案 0 :(得分:7)
解决:
我知道这不是最优雅的解决方案,但对我有用。
在打开弹出窗口之前,我插入一个带有特定ID的“span”,如下所示:
var sel = tinyMCE.activeEditor.selection;
sel.setContent('<span id="_math_marker"> </span>');
然后,当弹出窗口关闭并且文本被发送回编辑器时,我会用标记查找范围,然后选择它并拨打setContent
:
var ed = tinyMCE.activeEditor;
var marker = ed.dom.get('_math_marker');
ed.selection.select(marker, false);
ed.selection.setContent("TEXT TO INSERT");
这适用于所有浏览器!如果关闭弹出窗口而不插入任何内容以避免在编辑器中留下垃圾,请记住删除跨度。
: - )
答案 1 :(得分:1)
只需删除.selection部分,因此您的代码应该是
tinyMCE.activeEditor.setContent(text to insert, {format: 'bbcode'});
答案 2 :(得分:1)
在IE8中无法获得活动编辑器,因此需要关注,所以使用
tinyMCE.activeEditor.focus();
希望它适合你。
答案 3 :(得分:0)
尝试这样的事情:
var myField = tinyMCE.get("SMSBody");
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = fieldName;
}
else if (document.getSelection) {
tinyMCE.activeEditor.selection.setContent(fieldName);
myField.focus();
}
希望它适合你。
答案 4 :(得分:0)