拖动超链接,然后键入新文本包括超链接中的新文本

时间:2014-05-16 16:50:04

标签: firefox tinymce tinymce-4

http://www.frostjedi.com/terra/dev/tinymce/test3.html

当我将“Sample Link”向下拖动到textarea然后开始输入新文本时,我输入的是超链接的一部分。关于如何改变这种行为的任何想法?即。所以新输入的文本不是超链接的一部分?

这个问题似乎只发生在Firefox而不是Chrome中。在Chrome中,拖动它时没有任何反应。

1 个答案:

答案 0 :(得分:1)

你走了:

(function($) {
    tinymce.create('tinymce.plugins.fixinsertlinks', {

        init : function(editor, url) {

            editor.on('keydown', function(event) {

                var ignoredKeys = [8,46,37,38,39,40,27,16,17,18,91,9,20,121,122,123];
                if ($.inArray(event.keyCode, ignoredKeys) == -1) {
                    var node = editor.selection.getNode();
                    var a = editor.dom.getParent(node, 'a');
                    var b = editor.dom.getParent(node, 'b');
                    var i = editor.dom.getParent(node, 'i');

                    var a_is_parent_of_b = editor.dom.getParent(b, 'a');
                    var a_is_parent_of_i = editor.dom.getParent(i, 'a');

                    var b_is_parent_of_i = editor.dom.getParent(i, 'b');
                    var i_is_parent_of_b = editor.dom.getParent(b, 'i');

                    var element = false;
                    if (a) {
                        element = a;
                        if (b && !a_is_parent_of_b) {
                            element = b;
                            if (i && i_is_parent_of_b) {
                                element = i;
                            }
                        }
                        if (i && !a_is_parent_of_i) {
                            element = i;
                            if (b && b_is_parent_of_i) {
                                element = b;
                            }
                        }
                    } else if (b) {
                        element = b;
                        if (i && i_is_parent_of_b) {
                            element = i;
                        }
                    } else if (i) {
                        element = i;
                        if (b && b_is_parent_of_i) {
                            element = b;
                        }
                    }

                    if (element) {
                        var $caretPlaceholder = $('<span id="caret_placeholder">&nbsp;</span>');
                        editor.dom.insertAfter($caretPlaceholder, element); 
                        editor.selection.select(editor.dom.select('span#caret_placeholder')[0]);
                        editor.dom.remove(editor.dom.select('span#caret_placeholder')[0]);
                    }                   
                }
            });

        },  

        getInfo: function() {
            return {
                longname : 'Move cursor outside of links',
                author : 'Me',
                authorurl : 'http://stackoverflow.com/questions/23700597/dragging-hyperlink-and-then-typing-new-text-includes-new-text-in-hyperlink',
                infourl : '',
                version : "2.0"
            };
        }
    });

    tinymce.PluginManager.add('fixinsertlinks', tinymce.plugins.fixinsertlinks);

})(jQuery);

这是一个工作小提琴:http://fiddle.tinymce.com/Ugeaab/2

尝试从左侧边栏拖动任何链接(例如,从底部的“反馈”链接),您现在可以非常轻松地在不属于链接的链接之后添加您自己的文本。

此插件修复了任何浏览器的问题。要编辑链接的文本,只需单击工具栏中的链接按钮。

干杯!

编辑:

要使用此插件,请确保在页面中的任何位置包含上述javascript(即使在单独的文件中),并在初始化TinyMCE时将其添加到插件列表(其名称为fixinsertlinks)。有关使用自定义插件初始化TinyMCE的更多详细信息,请参阅示例小提琴。