Javascript TinyMCE粘贴为纯文本

Javascript TinyMCE粘贴为纯文本,javascript,html,text,tinymce,wysiwyg,Javascript,Html,Text,Tinymce,Wysiwyg,这是web上RTE的常见问题之一。请您指导我如何: 粘贴为纯文本 保留HTML,但删除WORD/HTML样式 我想直接在粘贴时执行(粘贴预处理回调),而不打开粘贴插件提供的对话框 有什么想法/经历吗 谢谢 Imran这是我获得粘贴纯文本的方法 1。粘贴预处理设置(在tinymce init中) 粘贴预处理:函数(pl,o){ //示例:保留粗体、斜体、下划线和段落 //o、 内容=带标签(o.content,); //删除所有标记=>纯文本 o、 内容=带标签(o.content.); },

这是web上RTE的常见问题之一。请您指导我如何:

  • 粘贴为纯文本
  • 保留HTML,但删除WORD/HTML样式
  • 我想直接在粘贴时执行(粘贴预处理回调),而不打开粘贴插件提供的对话框

    有什么想法/经历吗

    谢谢


    Imran

    这是我获得粘贴纯文本的方法

    1。粘贴预处理设置(在tinymce init中)

    粘贴预处理:函数(pl,o){ //示例:保留粗体、斜体、下划线和段落 //o、 内容=带标签(o.content,); //删除所有标记=>纯文本 o、 内容=带标签(o.content.); }, 2。功能条标签(在主文档上)

    //从字符串中去除HTML和PHP标记
    //返回1:‘凯文·范·佐内维尔德’
    //示例2:strip_标签(“Kevin van Zonneveld

    ”,“”); //返回2:“Kevin van Zonneveld

    ” //示例3:strip_标记(“,”) //示例4:带标签('1<5>1'); //返回4:'1<5>1' 功能条标签(str,允许的标签) { var key='',allowed=false; var匹配=[];允许的var_数组=[]; 允许的var_标记=“”; var i=0; var k=''; var html=''; var replacer=函数(搜索、替换、str){ 返回str.split(搜索)。join(替换); }; //构建allowes标记关联数组 如果(允许的\u标记){ 允许的_数组=允许的_标记匹配(/([a-zA-Z0-9]+)/gi); } str+=''; //匹配标签 matches=str.match(/(]*>)/gi); //检查所有HTML标记 用于(输入匹配项){ 如果(isNaN(键)){ //IE7黑客 继续; } //保存HTML标记 html=匹配[key].toString(); //标签不在允许列表中吗?从str中删除! 允许=错误; //检查所有允许的标签 对于(k在允许的_数组中){//Init 允许的_标记=允许的_数组[k]; i=-1; 如果(i!=0){i=html.toLowerCase().indexOf(“”);}
    如果(i!=0){i=html.toLowerCase().indexOf('正在到处寻找此项..对于TinyMCE,您可以使用内置粘贴作为文本行为。只需使用以下值设置TinyMCE init

    资料来源:jerome.chevreau


    实际上,您现在可以这样做:

    plugins: 'paste',
    ...
    paste_auto_cleanup_on_paste : true,
    paste_remove_styles: true,
    paste_remove_styles_if_webkit: true,
    paste_strip_class_attributes: true,
    
    归功于:

    我用过这个:

        oninit: function (ed) {
            ed.pasteAsPlainText = true;
        }
    
    连同

    paste_text_sticky: true
    

    现在有一个新选项取代了上述所有选项:

    tinymce.init({
       paste_as_text: true
    });
    

    或者在django tinymce中的settings.py中:

    TINYMCE_DEFAULT_CONFIG = {
       'paste_as_text': True,
    }
    

    我使用了@Thariama解决方案,但有一个问题

    在粘贴预处理函数中:

    paste_preprocess : function(pl, o) {
      o.content = StripTags( o.content,'' );
      console.log(o.content);
    },
    
    Tinymce将字符串返回为:

    原始字符串:

    "<h1>History.js Test Suite</h1>
            <p>HTML5 Browsers must pass the HTML4+HTML5 tests, HTML4 Browsers must pass the HTML4 tests and should fail the HTML5 tests.</p>"
    

    我认为这应该会让文章更清晰一些,但我希望有更多的建议/解决方案:哇!谢谢Thariama。我从哪里可以买到“替换品”“定义?您只需在strip_tags Call中输入要保留的标记。这是我找到的唯一一个删除所有标记的解决方案。以前的插件只有删除样式的选项。@Thariama如果您想将多个标记作为strip_tags()的第二个参数,该怎么办?@Scree:在上面的代码中:strip_tags(o.content,”)@Chris,你到底把这些放在哪里了?这应该和其他选项一起放在tinyMCe.init({})中。有办法保留空格吗?
    TINYMCE_DEFAULT_CONFIG = {
       'paste_as_text': True,
    }
    
    paste_preprocess : function(pl, o) {
      o.content = StripTags( o.content,'' );
      console.log(o.content);
    },
    
    "<h1>History.js Test Suite</h1>
            <p>HTML5 Browsers must pass the HTML4+HTML5 tests, HTML4 Browsers must pass the HTML4 tests and should fail the HTML5 tests.</p>"
    
    &lt;h1&gt;History.js Test Suite&lt;/h1&gt;<br /> <br />&lt;p&gt;HTML5 Browsers must pass the HTML4+HTML5 tests, HTML4 Browsers must pass the HTML4 tests and should fail the HTML5 tests.&lt;/p&gt;
    
    var $str1 = '&lt;h1&gt;History.js Test Suite&lt;/h1&gt;<br /> <br />&lt;p&gt;HTML5 Browsers must pass the HTML4+HTML5 tests, HTML4 Browsers must pass the HTML4 tests and should fail the HTML5 tests.&lt;/p&gt;';
    
    
    function StripTags(string) {
    
      var decoded_string = $("<div/>").html(string).text();
      return $("<div/>").html(decoded_string).text();
    
    }
    
    console.log(StripTags($str1));
    
    History.js Test Suite HTML5 Browsers must pass the HTML4+HTML5 tests, HTML4 Browsers must pass the HTML4 tests and should fail the HTML5 tests.