如何在默认情况下以纯文本制作锡箔粘贴
谷歌search了数千次,没有人给出了一个完整的解决scheme,默认情况下如何制作纯文本的Tinymce粘贴,并删除任何格式,而无需点击“粘贴为文本”button。
任何想法如何实现? 或者如何自动启用“粘贴为文本”button?
谢谢
编辑:这个解决scheme是为3.x版本,4.x版本阅读@Paulo Neves的答案
问题是Paste插件会自动重置每个粘贴上的纯文本粘贴。 所以我们需要做的 – 把它放回去。 下面的代码应该有所帮助。
tinyMCE.init({ ... oninit : "setPlainText", plugins : "paste" .... });
setPlainText的定义
function setPlainText() { var ed = tinyMCE.get('elm1'); ed.pasteAsPlainText = true; //adding handlers crossbrowser if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) { ed.onKeyDown.add(function (ed, e) { if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) ed.pasteAsPlainText = true; }); } else { ed.onPaste.addToTop(function (ed, e) { ed.pasteAsPlainText = true; }); } }
所以现在它总是很平淡。
对于tinyMCE 3X或4X来说,有一点变化。 现在你可以做到这一点,它工作正常。
tinymce.init({ plugins: "paste", paste_as_text: true });
我用这个代码解决了这个问题
tinyMCE.init({ ... plugins : "paste", paste_text_sticky : true, setup : function(ed) { ed.onInit.add(function(ed) { ed.pasteAsPlainText = true; }); } .... })
刚刚碰到这个,发现从TinyMCE 3.4.2开始,你可以简单地:
paste_text_sticky: true, paste_text_sticky_default: true
…这很好。
我认为最简单的方法是这样的:
tinymce.init({ ... paste_as_text: true, plugins: "paste", ... });
是不是更好使用:
var ed = tinyMCE.activeEditor;
代替:
var ed = tinyMCE.get('elm1');
仅供参考,TinyMCE通过将其作为粘贴插件的默认选项进行了改进。 更多信息: http ://www.tinymce.com/wiki.php/Plugin: paste
但是,这还不够完美。 所以这是一个脚本,也脱离所有的HTML:
// Paste paste_auto_cleanup_on_paste : true, paste_remove_spans: true, paste_remove_styles: true, paste_retain_style_properties: false, paste_preprocess : function(pl, o) { // Replace <div> with <p> o.content = o.content.replace(/<div>/gi, "<p>"); o.content = o.content.replace(/<\/div>/gi, "</p>"); o.content = o.content.replace(/<\r\n/gi, "\n"); o.content = o.content.replace(/<\n\n/gi, "\n"); o.content = o.content.replace(/<\n\n/gi, "\n"); // Replace empty styles o.content = o.content.replace(/<style><\/style>/gi, ""); o.wordContent = true; }, paste_postprocess : function(pl, o) { //console.log(o.node.innerHTML); var ed = pl.editor, dom = ed.dom; // Remove all tags which are not <p> or <br> tinymce.each(dom.select('*', o.node), function(el) { if (el.tagName.toLowerCase() != "p" && el.tagName.toLowerCase() != "br") { dom.remove(el, 1); // 1 = KeepChildren console.log(el.tagName); } dom.setAttrib(el, 'style', ''); }); },
资料来源: http : //www.tinymce.com/forum/viewtopic.php? pid= 60121#p60121
我不确定这是可能的,因为“粘贴为纯文本”实际上会在文本添加到窗口之前执行清理。 如果您只是将数据粘贴到窗口中,则无法执行任何操作。 (除非你迷上了onChange
或其他什么东西),但是他们最终可能会修复已经粘贴的代码,从而“双重修复”它。
我做了如下:
var pastePlainText = function() { // No need to pass in an ID, instead fetch the first tinyMCE instance var ed = tinyMCE.get(0); ed.pasteAsPlainText = true; //adding handlers crossbrowser if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) { ed.onKeyDown.add(function (ed, e) { if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) ed.pasteAsPlainText = true; }); } else { ed.onPaste.addToTop(function (ed, e) { ed.pasteAsPlainText = true; }); } };
接着:
tinyMCE.init({ // ... plugins: "paste", oninit: pastePlainText // Note, without " // ... })
没有插件:收听粘贴事件,获取剪贴板数据
如果因为某种原因无法使用或不想使用插件,则可以创build自己的“粘贴为纯文本”callback函数,如下所示:
tinyMCE.init({ // ..., setup: function (editor) { // Listen for paste event, add "Paste as plain text" callback editor.onPaste.add(function (editor, e) { // Prevent default paste behavior e.preventDefault(); // Check for clipboard data in various places for cross-browser compatibility. // Get that data as text. var content = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text'); // Let TinyMCE do the heavy lifting for inserting that content into the editor. editor.execCommand('mceInsertContent', false, content); }); } });
注意:这是为TinyMCE 3.5.x创build的。 兼容性可能因版本而异。