【问题标题】:dragging hyperlink and then typing new text includes new text in hyperlink拖动超链接然后键入新文本在超链接中包含新文本
【发布时间】:2014-05-21 16:42:15
【问题描述】:

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

当我将“示例链接”拖到文本区域然后开始输入新文本时,我输入的新文本是超链接的一部分。关于如何改变这种行为的任何想法? IE。所以新输入的文本不是超链接的一部分?

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

【问题讨论】:

  • 在 Chrome 上,当我将“示例链接”拖到 textarea 然后开始输入时,没有任何反应,因为 textarea 不在焦点上。我必须在文本区域内单击才能开始输入,这将发生在我单击的任何位置。
  • 我描述的问题发生在 Firefox - 而不是 Chrome。我已经更新了我的原始帖子。谢谢!
  • 如果您开 100 名代表赏金,​​我将编写一个自定义 TinyMCE 插件来解决此问题。
  • 当然,为什么不呢?虽然在我奖励赏金之前,它需要在我的最后工作!但我确实会奖励赏金,这可以从我拥有 Benefactor 徽章中得到证明,所以你不必担心:stackoverflow.com/help/badges/221/benefactor?userid=569976
  • 已回答 ;) 并且还投了赞成票,因为这是 TinyMCE 作者早就应该解决的问题!

标签: firefox tinymce tinymce-4


【解决方案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 的更多详细信息,请参阅示例小提琴。

【讨论】:

  • 当我尝试奖励赏金时,它会显示“你可以在 22 小时内奖励你的赏金”。我明天晚上再试一次。
  • 添加&lt;b&gt; 标签会导致它中断。我更新了frostjedi.com/terra/dev/tinymce/test4.html 来演示。锚标记仍然终止,但粗体标记在拖动后保留。似乎它应该在拖动链接时关闭所有标签 - 而不仅仅是关闭其中一些标签。
  • 因此,如果&lt;b&gt; 标签在&lt;a&gt; 标签内,它似乎可以工作。如果&lt;a&gt; 在&lt;b&gt; 标记内,则它不起作用。我尝试用editor.dom.getParent(node) 替换代码中的editor.dom.getParent(node, 'a'),但这也不是很好。输入 2-3 个键后,它开始将我输入的所有键添加到文本的开头而不是结尾。有任何想法吗?如果可以解决剩下的问题,我将奖励赏金。谢谢!
  • @neubert 我已经更新了答案。 a、b 和 i 的任意组合都可以:&lt;a&gt;&lt;b&gt;&lt;/b&gt;&lt;/a&gt;、&lt;b&gt;&lt;a&gt;&lt;/a&gt;&lt;/b&gt;、&lt;a&gt;&lt;i&gt;&lt;/i&gt;&lt;/a&gt;、&lt;i&gt;&lt;a&gt;&lt;/a&gt;&lt;/i&gt;、&lt;i&gt;&lt;b&gt;&lt;a&gt;&lt;/a&gt;&lt;/b&gt;&lt;/i&gt;。干杯!
  • 如果你想做的标签是怎么办?似乎一个最佳解决方案不需要像你的那样描述父母的每一个可能的排列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多