我已成功设法设置一个粘贴事件,以捕获粘贴到文本区域的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和其他)。
答案 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页面的链接:
我发现使用范围更容易,createBookmark方法很好,因为它设置了标记,即使DOM发生变化也可以获取正确的起点和终点(就像粘贴新内容时一样) 。您可以在粘贴后使用moveToBookmark()来选择范围。
由于文档稀疏,我发现在源代码中搜索调用方法的位置很有帮助。看看它们是如何被使用的,可以让我更好地了解应用这些方法所需的对象类型。
好吧, 乔
答案 2 :(得分:1)
从CKEditor 4.1开始,不需要进行自定义编码来定义将数据粘贴到CKEditor时应保留的元素列表,Advanced Content Filter应该可以解决问题。
使用默认配置启用ACF - CKEditor将接受可以使用它创建的所有标记,或者使用或多或少严格的允许标记/属性/样式集定义您自己的规则集。见documentation