CKEditor:在粘贴时应用removeFormat

时间:2011-08-30 15:53:38

标签: javascript ckeditor

我已成功设法设置一个粘贴事件,以捕获粘贴到文本区域的HTML。

我需要在粘贴到文本区域之前或之时自动将removeFormat命令应用于该HTML,以便我可以删除类,各种标记和其他属性。有人能指出我正确的方向来正确应用removeFormat命令吗?

到目前为止,这是我的代码:

$(function(){
        $('textarea').ckeditor(
            function( textarea ){
                var editor = this;
                editor.on('paste', function( e ) { 
                    //alert(e.data.html); // This shows the HTML
                    editor.execCommand( 'removeFormat', e.data.html ); // Doesn't seem to do anything, HTML is pasted with the attributes intact
                    });              
            }
        )
    });

谢谢!

P.S。强制纯文本选项不可行,因为我希望保留一些HTML元素(p,table和其他)。

3 个答案:

答案 0 :(得分:22)

您可以使用

config.forcePasteAsPlainText = true;

cf http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html

答案 1 :(得分:2)

您需要先选择内容,然后才能将removeFormat应用到其中。

您可以尝试抓取范围(即使只是光标位于插入点)并在粘贴之前保存书签。

粘贴后,使用书签再次选择该范围。

这应该选择您在范围的开始和结束之间粘贴的所有内容。

然后你可以使用removeFormat:

editor.execCommand( 'removeFormat', editor.selection );

以下是范围和选择API页面的链接:

http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dom.range.html

http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dom.selection.html

我发现使用范围更容易,createBookmark方法很好,因为它设置了标记,即使DOM发生变化也可以获取正确的起点和终点(就像粘贴新内容时一样) 。您可以在粘贴后使用moveToBookmark()来选择范围。

http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dom.range.html#createBookmark

由于文档稀疏,我发现在源代码中搜索调用方法的位置很有帮助。看看它们是如何被使用的,可以让我更好地了解应用这些方法所需的对象类型。

好吧, 乔

答案 2 :(得分:1)

从CKEditor 4.1开始,不需要进行自定义编码来定义将数据粘贴到CKEditor时应保留的元素列表,Advanced Content Filter应该可以解决问题。

使用默认配置启用ACF - CKEditor将接受可以使用它创建的所有标记,或者使用或多或少严格的允许标记/属性/样式集定义您自己的规则集。见documentation