【问题标题】:setting the ckeditor caret at the end of a new link在新链接的末尾设置 ckeditor 插入符号
【发布时间】:2015-09-25 09:08:11
【问题描述】:

我目前正在为一个项目开发 ckeditor, 我们正在使用链接对话框插件。

正如标题中所说,我希望创建新链接,并在其末尾设置插入符号。 添加新链接后,默认行为会选择编辑器中的文本。

我一直在使用 link.js 插件

我想我找到了它发生的地方,但我无法在我的 a 标签结束后设置我的插入符号(它有时会工作=>它将插入符号放在最后,但经过一些尝试后它确实把它放在我的链接的开头)

以下是它的作用示例: 第一次:[a href="#"]我的链接[/a]^ 经过一些尝试:[a href="#"]我的链接[/a][a href="#"]我的链接[/a]^[a href="#"]我的链接[/a]

链接插件的onOk方法里面的代码:

//I've commented the line under to have no selection : it works
//range.select();
// According to the doc, this should do the job ??
range.moveToPosition(text, CKEDITOR.POSITION_AFTER_END);

感谢您的关注。

博士。

【问题讨论】:

    标签: javascript html ckeditor rich-text-editor


    【解决方案1】:

    您可以在不触及插件核心的情况下实现这一目标。策略是执行默认对话框的onOk,然后根据您的需要简单地调整选择(JSFiddle)。为此,您首先需要在 dialogDefinition 事件上覆盖默认的 onOk

    CKEDITOR.on( 'dialogDefinition', function( evt ) {
        var dialogName = evt.data.name;
        var dialogDefinition = evt.data.definition;
        var editor = evt.editor;
    
        if ( dialogName == 'link' ) {
            var defaultOnOk = dialogDefinition.onOk;
    
            dialogDefinition.onOk = function() {            
                defaultOnOk.apply( this, arguments );
    
                var sel = editor.getSelection(),
                    range = sel.getRanges()[ 0 ],
                    path = range.startPath();
    
                range.moveToPosition( path.contains( 'a' ), CKEDITOR.POSITION_AFTER_END );
                range.select();
            }
        }
    });
    

    【讨论】:

    • 嗨 Olek,谢谢你的回答,在这样做之后我收到以下错误 Uncaught TypeError: Cannot read property 'getParent' of null 我已经删除了选择操作,因为我不想要我的无论如何,要选择的文本,由于该错误,我的对话框不会关闭..
    【解决方案2】:

    我知道之前的答案和问题已经过时了,但我遇到了完全相同的问题并且没有立即找到合适的工作解决方案。使用@oleq 的答案,我得到了"getParent of null" 错误。

    您可以利用事件侦听器,而不是触及核心或覆盖核心函数(例如onOk)。在这种情况下,dialogDefinition 中的 onHide 仅在关闭对话框之前被调用一次。

    CKEDITOR.on('dialogDefinition', function (ev) {
    
            var dialogName = ev.data.name,
                dialogDefinition = evt.data.definition;
    
            // Only in case of the link dialog
            if ( dialogName === 'link' ) {
                dialogDefinition.on('hide', function (e) {
                    var sel = ev.editor.getSelection(), // Current Selection
                        range = sel.getRanges()[0];
                    range.moveToPosition(sel.getStartElement(), CKEDITOR. POSITION_AFTER_END);
                    range.select();
                });
            }
    
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多