Firefox 拖动超链接,然后键入新文本将在超链接中包含新文本

Firefox 拖动超链接,然后键入新文本将在超链接中包含新文本,firefox,tinymce,tinymce-4,Firefox,Tinymce,Tinymce 4,当我将示例链接向下拖动到文本区域,然后开始键入新文本时,我键入的新文本是超链接的一部分。关于我如何改变这种行为有什么想法吗?也就是说,新输入的文本不是超链接的一部分 这个问题似乎只发生在Firefox上,而不是Chrome上。在Chrome中,当我拖动它时,不会发生任何事情。给你: (function($) { tinymce.create('tinymce.plugins.fixinsertlinks', { init : function(editor, url)

当我将示例链接向下拖动到文本区域,然后开始键入新文本时,我键入的新文本是超链接的一部分。关于我如何改变这种行为有什么想法吗?也就是说,新输入的文本不是超链接的一部分

这个问题似乎只发生在Firefox上,而不是Chrome上。在Chrome中,当我拖动它时,不会发生任何事情。

给你:

(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);
这是一把小提琴:

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

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

干杯

编辑:


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

在Chrome上,当我将示例链接拖动到textarea,然后开始键入时,由于textarea未处于焦点,因此不会发生任何事情。我必须在文本区域内单击才能开始键入,这将发生在我单击的任何位置。我描述的问题发生在Firefox中,而不是Chrome中。我已经更新了我的原始帖子。谢谢如果你打开了一个100代表的悬赏,我会写一个自定义的TinyMCE插件来解决这个问题。当然,为什么不呢?虽然在我授予赏金之前,我需要在我这一方工作!但我确实会颁发奖金,因为我拥有恩人徽章,所以你不必担心:回答;而且投票率也提高了,因为这是TinyMCE作者早就应该解决的问题!当我尝试奖励时,上面说你可以在22小时内奖励你的奖励。我明天晚上再试一次。添加标签会导致它有点崩溃。我已经更新以演示。锚定标记仍然终止,但粗体标记在拖动后保留。当链接被拖动时,它似乎应该关闭所有标签,而不仅仅是关闭其中的一些标签。因此,如果标签在标签内,它似乎可以工作。如果在标记内,则不起作用。我尝试用editor.dom.getParentnode替换代码中的editor.dom.getParentnode“a”,但也没有很好的效果。在输入2-3个键后,它开始将我输入的所有键预加到文本的开头,而不是结尾。有什么想法吗?如果剩下的问题能解决的话,我会赏金的。谢谢@我已经更新了答案。如果a、b和我的组合有效:。干杯如果你想做的标记是?似乎一个最佳的解决方案不需要像你所做的那样描绘出父母的每一种可能的排列。