CLEditor,将内容粘贴为主窗口中的文本功能

时间:2012-03-28 18:46:26

标签: javascript cleditor

我正在使用CLEditor http://premiumsoftware.net/cleditor/作为我的文本编辑器。有一个“粘贴为文本”的功能,当单击该按钮时,会出现一个带有textarea的弹出窗口,用于粘贴您的内容并删除样​​式。

我想要做的是采用相同的功能,但只要有人粘贴到主要文本区域,就会自动执行此操作。我该如何触发?

我创建了一个JS Fiddle,http://jsfiddle.net/helpinspireme/naubS/,但无法将所有JS粘贴到那里,所以要链接到主要的JS文件,以便CLEditor访问他们的网站:http://premiumsoftware.net/cleditor/

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我知道我没有回答您的实际问题,但是如果您的真正的问题是尝试从Microsoft Office(例如Word)粘贴文本的用户生成的垃圾,我会建议考虑替代解决方案。

CLEditor本身可以在iFrame(富文本模式)和textarea(源模式)之间切换。 “粘贴为文本”功能使用了一个textarea,它不支持ifself的富文本,所以它不会首先允许垃圾html。

但是,如果编辑器处于富文本模式,则很难阻止用户从Word粘贴(他可以使用常规粘贴按钮,按CTRL-V甚至使用鼠标右键上下文菜单,这是所有不同的事件,并使用javascript很难拦截)。所以现在损坏已经完成;你的编辑器里面有乱糟糟的html。因此,我没有尝试清理Word生成的垃圾,而是在保存捕获的输入时实现了以下检查(javascript):

if(clEditorValue && (clEditorValue.indexOf('<!--') !== -1 || clEditorValue.indexOf('mso-ansi-language') !== -1 ) ) {
  alert('Unable to process text pasted from Word, please use "Paste as text" or modify your input');
  return;
}

我希望这个答案对其他想要达到同样目的的人有用。

答案 1 :(得分:0)

当粘贴到cleditor时,编辑器会从源代码中获取所有html。我最终编辑了jquery.cleditor.js并在$ doc.click(hidePopups)函数中添加了一个绑定函数。我使用setTimeouts来允许文本填充输入和updateTextArea函数来完成。

    .bind("paste", function() {
            setTimeout(function() {
                refreshButtons(editor);
                updateTextArea(editor, true);
                //remove any and all html from the paste action
                setTimeout(function() {
                    //clean up the html with removeHtml function
                    $(editor.doc.body).html(removeHtml($(editor.doc.body).html()));

                    //change the input value with new clean string
                    $("#" + editor.$area[0].id).val($(editor.doc.body).html());
                }, 100);
            }, 100);
        })

我使用下面的removeHtml函数从粘贴的内容中删除所有HTML。

//remove html altogether
function removeHtml(str) {
    var regex = /(<([^>]+)>)/ig;
    var result = str.replace(regex, "");
    return result;
}

此解决方案现已投入生产。