有谁知道如何在CKEditor 3.x中附加onpaste
事件?
我基本上想要获取 CTRL + V 数据并添加一些文本,然后将其添加到编辑器中。
我环顾四周但没有找到明确的答案。 CKEditor论坛没什么帮助。
答案 0 :(得分:18)
这应该可以解决问题
var editor = CKEDITOR.instances.YourInputControlName;
editor.on('paste', function(evt) {
// Update the text
evt.editor.setData(evt.editor.getData() + ' your additional comments.');
}, editor.element.$);
答案 1 :(得分:12)
此示例通过删除所有img元素来编辑要粘贴的内容。
CKEDITOR.on('instanceReady', function (ev) {
ev.editor.on('paste', function (ev) {
ev.data.html = ev.data.html.replace(/<img( [^>]*)?>/gi, '');
});
});
答案 2 :(得分:12)
你们两个例子都是合成的。
首先,editor.getData()获取编辑器的所有内容,因此如果您只想处理粘贴的数据,则需要获取ev.data.html并粘贴到正确的位置。
editor = CKEDITOR.instances.editor1;
editor.on('paste', function (evt) {
var editor = evt.editor;
evt.stop(); // we don't let editor to paste data, only for current event
// show loader that blocks editor changes
$.post('clean.php', {html: evt.data.html}, function (data) {
editor.insertHtml( data.html ); // text will be inserted at correct place
// hide loader
}, 'json');
});
不要使用函数editor.setReadonly(true / false),您将无法在正确的位置粘贴文本(在异步数据处理的情况下)。
答案 3 :(得分:1)
我知道这是一个老问题,但我想我会添加我的aliaksej答案的版本,因为它允许使用自定义的'清洁剂' - 它对我来说不太适用,直到我将其修改为如下所示。
editor = CKEDITOR.instances[id];
editor.on('paste', function (evt) {
evt.stop();
$.post('/actions/clean.php', {html: evt.data.dataValue}).done(function (data) {
evt.editor.insertHtml(data);
}, 'json');
});
答案 4 :(得分:1)
editor = CKEDITOR.instances[id];
editor.on('paste', function (evt) {
evt.stop();
var data = evt.data.dataValue;
if (window.chrome || window.safari) {
// removing span wrapper on webkit browsers.
data = $(data).html();
}
evt.editor.insertHtml(data);
});