用Google搜索了数千次,没有人提供完整的解决方案,默认情况下如何以纯文本制作Tinymce粘贴,并删除任何格式而不点击“粘贴为文本”按钮。
有关如何实施的任何想法?或者如何自动启用“粘贴为文本”按钮?
谢谢
答案 0 :(得分:135)
对于tinyMCE 3X或4X,情况有所改变。 现在你可以做到这一点并且工作正常。
tinymce.init({
plugins: "paste",
paste_as_text: true
});
答案 1 :(得分:82)
我用这段代码解决了这个问题
tinyMCE.init({
...
plugins : "paste",
paste_text_sticky : true,
setup : function(ed) {
ed.onInit.add(function(ed) {
ed.pasteAsPlainText = true;
});
}
....
})
答案 2 :(得分:54)
编辑:此解决方案适用于版本3.x,适用于4.x版本,请阅读@Paulo Neves的答案
问题是,粘贴插件会自动重置每个粘贴上的纯文本粘贴。所以我们需要做的就是 - 把它还原。以下代码应该有所帮助。
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;
});
}
}
所以现在它总是很明显。
答案 3 :(得分:35)
我自己碰到了这个,发现从TinyMCE 3.4.2开始,你可以简单地说:
paste_text_sticky: true,
paste_text_sticky_default: true
......这很不错。
答案 4 :(得分:5)
我认为最简单的方法是:
tinymce.init({
...
paste_as_text: true,
plugins: "paste",
...
});
答案 5 :(得分:1)
使用起来不是更好:
var ed = tinyMCE.activeEditor;
而不是:
var ed = tinyMCE.get('elm1');
答案 6 :(得分:1)
仅供参考,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
答案 7 :(得分:1)
如果因任何原因无法使用或不想使用插件,您可以创建自己的&#34;粘贴为纯文本&#34;像这样的回调函数:
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创建的。兼容性可能因版本而异。
答案 8 :(得分:0)
我做了如下:
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 "
// ...
})
答案 9 :(得分:0)
如果您使用.yml文件,请添加插件paste
和paste_as_text: true
default:
plugins:
- paste
paste_as_text: true
答案 10 :(得分:-1)
我不确定这是否可行,因为“粘贴为纯文本”实际上会在文本添加到窗口之前对文本进行清理。如果只是将数据粘贴到窗口中,则无法执行任何操作。 (除非你迷上了onChange
或者什么),但是你可能最终修复已经粘贴过的代码,因此,“双重修复”它。