TinyMCE 粘贴为纯文本

IT技术 javascript html text tinymce wysiwyg
2021-01-29 15:41:48

这是网络上 RTE 的常见问题之一。你能指导我如何:

  1. 粘贴为纯文本
  2. 保留 HTML 但删除 WORD/HTML 样式

我想直接在粘贴(paste_preprocess 回调)上执行它,而无需打开 Paste 插件提供的对话框。

任何想法/经验?

谢谢,

伊姆兰

6个回答

这就是我为粘贴纯文本所做的工作。

1. paste_preprocess 设置(在 tinymce init 中)

paste_preprocess : function(pl, o) {
  //example: keep bold,italic,underline and paragraphs
  //o.content = strip_tags( o.content,'<b><u><i><p>' );

  // remove all tags => plain text
  o.content = strip_tags( o.content,'' );
},

2. 函数strip_tags(主文档上)

// Strips HTML and PHP tags from a string 
// returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
// example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');
// returns 2: '<p>Kevin van Zonneveld</p>'
// example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");
// returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'
// example 4: strip_tags('1 < 5 5 > 1');
// returns 4: '1 < 5 5 > 1'
function strip_tags (str, allowed_tags)
{

    var key = '', allowed = false;
    var matches = [];    var allowed_array = [];
    var allowed_tag = '';
    var i = 0;
    var k = '';
    var html = ''; 
    var replacer = function (search, replace, str) {
        return str.split(search).join(replace);
    };
    // Build allowes tags associative array
    if (allowed_tags) {
        allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi);
    }
    str += '';

    // Match tags
    matches = str.match(/(<\/?[\S][^>]*>)/gi);
    // Go through all HTML tags
    for (key in matches) {
        if (isNaN(key)) {
                // IE7 Hack
            continue;
        }

        // Save HTML tag
        html = matches[key].toString();
        // Is tag not in allowed list? Remove from str!
        allowed = false;

        // Go through all allowed tags
        for (k in allowed_array) {            // Init
            allowed_tag = allowed_array[k];
            i = -1;

            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}
            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');}
            if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag)   ;}

            // Determine
            if (i == 0) {                allowed = true;
                break;
            }
        }
        if (!allowed) {
            str = replacer(html, "", str); // Custom replace. No regexing
        }
    }
    return str;
}
@Thariama 如果您想要多个标签作为 strip_tags() 的第二个参数该怎么办?
2021-03-18 15:41:48
这是我发现删除所有标签的唯一解决方案过去的插件只有删除样式的选项。
2021-03-24 15:41:48
哇!谢谢塔里亚玛。我从哪里可以获得“替代者”的定义?
2021-03-27 15:41:48
您只需在 strip_tags 调用中输入要保留的标签
2021-04-05 15:41:48
@Scree:在上面的代码中:strip_tags(o.content,'<b><u><i><p>');
2021-04-10 15:41:48

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

plugins: 'paste',
...
paste_auto_cleanup_on_paste : true,
paste_remove_styles: true,
paste_remove_styles_if_webkit: true,
paste_strip_class_attributes: true,

归功于:http : //www.miuaiga.com/index.cfm/2010/1/7/New-TinyMCE-lets-you-paste-as-plain-text-automatically

现在有一个新选项可以替代以上所有选项:

tinymce.init({
   paste_as_text: true
});

http://www.tinymce.com/wiki.php/Configuration:paste_as_text

或在 django-tinymce 中,在 settings.py 中:

TINYMCE_DEFAULT_CONFIG = {
   'paste_as_text': True,
}
有没有办法保留空间?
2021-03-22 15:41:48

一直在寻找这个。对于 TinyMCE,您可以使用内置粘贴作为文本行为。只需使用以下值设置 tinymce init。

资料来源:jerome.chevreau,http ://www.tinymce.com/forum/viewtopic.php?id = 6788

//add paste plugin
plugins : 'paste',
//Keeps Paste Text feature active until user deselects the Paste as Text button
paste_text_sticky : true,
//select pasteAsPlainText on startup
setup : function(ed) {
    ed.onInit.add(function(ed) {
        ed.pasteAsPlainText = true;
    });
}

我用过这个:

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

随着

paste_text_sticky: true
这应该与其他选项一起放在 tinyMCe.init({}) 中。
2021-03-24 15:41:48
@Chris,你到底把这些放在哪里?
2021-04-13 15:41:48