tinymce.selection.setContent在IE中的textarea开头插入文本

时间:2011-12-29 10:14:04

标签: javascript jquery internet-explorer iframe tinymce

我已经为tinyMCE创建了一个插件,可以使用MathJax在编辑器数学公式中插入。 此插件在iframe中打开一个弹出窗口(使用jQuery),然后启动一个触发器事件,以便在tinyMCE活动编辑器中插入输入的公式。

我的代码在Chrome& Firefox(创建插入textarea插入位置的pre),但在IE中,文本插入textarea的开头。

我正在使用这样的setContent方法:

tinyMCE.activeEditor.selection.setContent(text to insert, {format: 'bbcode'});

我在插入之前尝试使用ed.focus(),在StackOverflow中找到了其他建议,但没有任何效果。

另外,我尝试在打开弹出窗口之前保存插入位置,并在插入时恢复它,但无论如何都不起作用。

有什么想法吗?

提前致谢。

5 个答案:

答案 0 :(得分:7)

解决:

我知道这不是最优雅的解决方案,但对我有用。

在打开弹出窗口之前,我插入一个带有特定ID的“span”,如下所示:

var sel = tinyMCE.activeEditor.selection;
sel.setContent('<span id="_math_marker">&nbsp;</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)

您好我使用了一个名为jCaret的jQuery插件来处理这种情况。 在大多数常用的浏览器中都能很好地工作(IE 7,8,9兼容兼容模式)。

查看下面链接中给出的示例

jCaret

由于