tinymce.selection.setContent在IE中将文本插入到文本区域的开头。

6
我已经为tinyMCE创建了一个插件,使用MathJax在编辑器中插入数学公式。该插件打开一个带有iframe的弹出窗口(使用jQuery),然后启动一个触发器 - 在事件上将输入的公式插入到tinyMCE活动编辑器中。
我的代码在Chrome和Firefox中运行良好(创建一个pre,插入到文本区域的插入光标位置),但是在IE中,文本会被插入到文本区域的开头。
我正在使用setContent方法,如下所示:
tinyMCE.activeEditor.selection.setContent(text to insert, {format: 'bbcode'});

我尝试在插入之前使用ed.focus()和其他在StackOverflow上找到的建议,但都没有对我起作用。

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

有什么想法吗?

提前致谢。

5个回答

8

已解决:

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

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

var sel = tinyMCE.activeEditor.selection;
sel.setContent('<span id="_math_marker">&nbsp;</span>');

然后,当弹出窗口关闭并且文本发送回编辑器时,我会查找带有标记的 span 元素,然后选择它并调用 setContent 函数:

var ed = tinyMCE.activeEditor;
var marker = ed.dom.get('_math_marker');
ed.selection.select(marker, false);
ed.selection.setContent("TEXT TO INSERT");

这适用于所有浏览器!记得删除 span,如果弹出窗口关闭时没有插入任何内容,以避免在编辑器中留下垃圾。 :-)

1

在IE8中无法获取活动编辑器,因此需要聚焦,所以使用

tinyMCE.activeEditor.focus();

希望它能对您有用。

1

只需删除“.selection”部分,你的代码应该如下所示:

tinyMCE.activeEditor.setContent(要插入的文本, {format: 'bbcode'});


0
尝试像这样做:

var myField = tinyMCE.get("SMSBody");
//IE支持 if (document.selection) {
myField.focus(); sel = document.selection.createRange(); sel.text = fieldName; } else if (document.getSelection) {
tinyMCE.activeEditor.selection.setContent(fieldName); myField.focus(); }
希望它对你有用。

不起作用 :( 现在我正在尝试在打开弹出窗口之前保存位置。 我会尽快更新。 谢谢 :) - vfportero

0

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

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

jCaret

谢谢


我会看一下你的建议。谢谢! - vfportero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接