【问题标题】:Insert Text at current position TINYMCE IE9在当前位置插入文本 TINYMCE IE9
【发布时间】:2012-12-12 21:38:46
【问题描述】:

如何将文本插入到 tinyMce 编辑器的当前位置。 它在 Chrome、FF、Safari 中完美运行,但在 IE 中它总是从 textarea 的顶部开始。 我目前正在执行以下操作:

tinyMCE.execCommand('mceInsertContent',false, 'blabla this is tekst');

我尝试了重点,其他命令,没有任何效果:(。

【问题讨论】:

    标签: tinymce internet-explorer-9


    【解决方案1】:

    感谢您的帮助,但没有任何效果。我找到了我自己的解决方案,我觉得有必要分享这个,因为我只发现了过时的解决方案,它不起作用:(。

    解决办法:

    在您的 TinyMCE 初始化中添加以下代码:

        tinyMCE.init({
    // General options
            elements: elementid,
            setup: function (ed) {
                ed.onKeyUp.add(function (ed, e) {
                    actualCaretPositionBookmark = tinyMCE.activeEditor.selection.getBookmark();
                });
                ed.onClick.add(function (ed, e) {
                    actualCaretPositionBookmark = tinyMCE.activeEditor.selection.getBookmark();
                }); 
            }
    

    其中“actualCaretPositionBookmark”是 javascript 中的一个全局变量,您的所有 javascript 代码都可以访问它

    然后,当您想通过 javascript 将文本添加到 TinyMCE 编辑器时,添加以下代码:

                    if (tinymce.isIE) {
                    tinyMCE.activeEditor.selection.moveToBookmark(actualCaretPositionBookmark);
                    tinyMCE.execCommand('mceInsertContent',false, 'My new text'); 
    
                }else {
                    tinyMCE.execCommand('insertHTML',false, 'My new text'); 
                }
    

    【讨论】:

    • 由于 onKeyUp 和 getBookmark(),我在 IE9 中的 tiny 中有一些奇怪的行为。代替 onKeyUponKeyPress 效果更好:)
    • 你节省了我的时间。谢谢..:)
    • 出色的解决方案。我在 addCommand 方法中添加了对 getBookmark 的调用,这意味着它会自动运行,但用户启动操作。为我节省了很多时间。谢谢。
    【解决方案2】:

    您可以使用这种方法来解决您的问题。在初始化 tinymce 时,将 setup 参数设置为以下(在 tinyMCE.init({...}) 内)

    ...
    theme: "advanced",   // example param
    plugins = 'code',    // example param
    setup : function(ed) {
        ed.onInit.add(function(ed, evt) {
    
            var dom = ed.dom;
            var doc = ed.getDoc();
    
            tinymce.dom.Event.add(doc, 'blur', function(e) {
                // onBlur you save your caret position
                actual_caret_position_bookmark = tinymce.get('your_editor_id').selection.getBookmark(2, true);
            });
        });
    },
    cleanup: true,      // example param
    ...
    

    现在,您需要在使用 mceInsertContent 命令插入新内容之前重置 tinymce 插入符号位置:

    tinymce.get('your_editor_id').selection.moveToBookmark(actual_caret_position_bookmark);
    

    【讨论】:

    • tinymce.get('your_editor_id').selection.getBookmark(2, true) 总是不确定的,(我使用正确的 id)。此外,如果我使用 inymce.activeEditor.selection.getBookmark(2, true) 该项目未定义。任何 ID,
    • 到那时您当然需要进行选择(编辑器中的插入符号以获得有效的书签)
    【解决方案3】:

    如果您在同一页面中有多个编辑器,您可以试试这个

    tinymce.get('content_id').execCommand('mceInsertContent', false, 'content to be inserted');

    【讨论】:

      【解决方案4】:

      这是DEMO在IE9中打开这个链接

      将光标放在文本区域中所需的位置,然后单击 tinyMCE 中第三行的最后一个图标(红色叉号)。

      希望对你有帮助!! :)

      根据您的评论,单击 tinymce 编辑器外部的按钮(单击我)。 再次检查DEMO

      【讨论】:

      • 它从工具栏按钮工作,但我的按钮不在 TinyMce 中,它是一个自制的侧边栏,当我从那里触发事件时,新内容总是写在编辑器的顶部原因是当我点击外部按钮时,IE中的光标消失了,它只是将内容添加到编辑器中,我需要保存光标位置吗?
      • 尝试点击按钮旁边的按钮,然后点击 IE9 中的按钮
      【解决方案5】:

      前段时间我有同样的问题,我有一个使用模式弹出窗口的插件,也使用了上述相同的方法。 :

      tinyMCE.execCommand('mceInsertContent',false, 'blabla this is tekst'); 
      

      在 IE9 中,文本插入到顶部。使用插入符号的问题在于,就我而言,发生了某些奇怪的事情(退格删除中断),所以我检查了嵌入在我正在使用的 tinyMCE 发行版中的笑脸插件的代码。我找到的解决方案是改用 TinyMCEPopup 对象,如下所示:

      tinyMCEPopup.execCommand('mceInsertContent', false, 'blabla this is tekst');
      

      问候。

      【讨论】:

        猜你喜欢
        • 2011-04-06
        • 1970-01-01
        • 2011-05-26
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        • 1970-01-01
        相关资源
        最近更新 更多