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

发布于 2024-12-23 16:11:47 字数 511 浏览 1 评论 0原文

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

我的代码在 Chrome 和 Chrome 中运行正常Firefox(创建一个pre,插入到文本区域的插入符位置),但在 IE 中,文本插入到文本区域的开头。

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

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

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

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

有什么想法吗?

提前致谢。

I have created a plugin for tinyMCE to insert in the editor mathematical formulas using MathJax.
This plugin opens a popup in a iframe (using jQuery) and then launches a trigger - on event to insert the entered formula in the tinyMCE active editor.

My code is working properly in Chrome & Firefox (creates a pre that is inserted in the caret position of the textarea) but in IE the text is inserted at the beginning of the textarea.

I'm using the setContent method like this:

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

I tried to use ed.focus() before inserting and other recommendations found in StackOverflow but nothing worked for me.

Also, I tried to save the caret position before opening the popup and restore it when inserting but did not work anyway.

Any ideas?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

薔薇婲 2024-12-30 16:11:48

已解决:

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

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

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");

这适用于所有浏览器!如果弹出窗口关闭而没有插入任何内容,请记住删除范围,以避免在编辑器中留下垃圾。

:-)

SOLVED:

I know that it's not the most elegant solution but works for me.

Before opening the popup I insert a "span" with and specific ID like this:

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

Then, when the popup closes and the text is sent back to the editor, I look for the span with the marker then I select it and call setContent:

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

This works for all browsers! Remember to delete the span if the popup is closed without inserting anything to avoid leaving rubbish in the editor.

:-)

情绪 2024-12-30 16:11:48

只需删除 .selection 部分,您的代码应类似于

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

Simply remove the .selection part, so your code should look like

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

空城仅有旧梦在 2024-12-30 16:11:48

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

tinyMCE.activeEditor.focus();

希望它对你有用。

In IE8 in cant get active editor, so need to focus,so use

tinyMCE.activeEditor.focus();

Hope it works for you.

刘备忘录 2024-12-30 16:11:48

尝试这样的事情:


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();
    }

希望它对你有用。

Try something like this:


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();
    }

Hope it works for you.

演多会厌 2024-12-30 16:11:48

您好,我使用了一个名为 jCaret 的 jQuery 插件来应对这种情况。
在大多数常用浏览器中都能完美运行(IE 7、8、9 也具有兼容模式)。

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

jCaret

谢谢

Hi I used one of the jQuery plugin called jCaret for these kinds of situation.
Worked perfectly in most of the usually used browsers (IE 7,8,9 with compatibility mode as well).

Have a look at the examples given in the link below

jCaret

Thanks

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文