在JAVASCRIPT中粘贴到RTE时删除MS Word格式

时间:2016-01-21 14:26:25

标签: javascript extjs ms-word

我正在使用EXTJS HTML编辑器,角色是2000,但是我正在剥离从word复制时出现的所有MS Word格式,我使用的是我在这里找到的这个功能

function cleanHTML(input) {
    // 1. remove line breaks / Mso classes
    var stringStripper = /(\n|\r| class=(")?Mso[a-zA-Z]+(")? ^p)/g;
    var output = input.replace(stringStripper, ' ');

    // 2. strip Word generated HTML comments
    var commentSripper = new RegExp('<!--(.*?)-->','g');
    var output = output.replace(commentSripper, '');

    // 3. remove tags leave content if any
    var tagStripper = new RegExp('<(/)*(meta|link|span|\\?xml:|st1:|o:|font)(.*?)>','gi');
    output = output.replace(tagStripper, '');

    // 4. Remove everything in between and including tags '<style(.)style(.)>'
    var badTags = ['style', 'script','applet','embed','noframes','noscript'];

    for (var i=0; i< badTags.length; i++) {
        tagStripper = new RegExp('<'+badTags[i]+'.*?'+badTags[i]+'(.*?)>', 'gi');
        output = output.replace(tagStripper, '');
    }

    // 5. remove attributes ' style="..."'
    var badAttributes = ['style', 'start'];
    for (var i=0; i< badAttributes.length; i++) {
        var attributeStripper = new RegExp(' ' + badAttributes[i] + '="(.*?)"','gi');
        output = output.replace(attributeStripper, '');
    }
    return output;
}

但是,我想保持字体颜色不变,我试图删除字体参数,但它不起作用。

2 个答案:

答案 0 :(得分:2)

本周我遇到了这个问题,并找到了这篇文章,认为可靠的回应可能会帮助其他人。经过一整天的工作,这是我的发现:

我一直在尝试做同样的事情,亚历山大的答案不能解决问题,因为<... style="color:"位于<span>标记内(在步骤2中已将其删除)。

如果字体不在跨度之内,则始终在此函数的底部(步骤5),所有样式标签都将被删除。

我花了整整一天的时间来研究可能的解决方案(对RegEx的经验很少),我想到了这一点:

function CleanWordFormatting(input) {
    // 1. Remove line breaks / Mso classes
    var stringStripper = /(\n|\r| class=(")?Mso[a-zA-Z]+(")?)/g;
    var output = input.replace(stringStripper, ' ');

    // 2. Strip Word generated HTML comments
    var commentSripper = new RegExp('<!--(.*?)-->', 'g');
    var output = output.replace(commentSripper, '');
    var tagStripper = new RegExp('<(/)*(meta|link|\\?xml:|st1:|o:|font)(.*?)>', 'gi');

    // 3. Remove tags leave content if any
    output = output.replace(tagStripper, '');

    // 4. Remove everything in between and including tags '<style(.)style(.)>'
    var badTags = ['style', 'script', 'applet', 'embed', 'noframes', 'noscript'];
    for (var i = 0; i < badTags.length; i++) {
        tagStripper = new RegExp('<' + badTags[i] + '.*?' + badTags[i] + '(.*?)>', 'gi');
        output = output.replace(tagStripper, '');
    }

    // 5. Remove any unwanted styling
    // NOTE: Add your own list of 'blacklisted' css attributes here
    var badStyling = ['margin-top:', 'margin-bottom:', 'line-height:', 'mso-fareast-font-family:&quot;', 'font-weight:', 'margin:'];
    for (var i = 0; i < badStyling.length; i++) {
        attrStripper = new RegExp('(' + badStyling[i] + ')([^;]*)+[^]', 'gm');
        output = output.replace(attrStripper, '');
    }

    // 6. Remove any unwanted attributes
    var badAttributes = ['start'];
    for (var i = 0; i < badAttributes.length; i++) {
        var attributeStripper = new RegExp(' ' + badAttributes[i] + '="(.*?)"', 'gi');
        output = output.replace(attributeStripper, '');
    }

    return output;
}

以下几行内容与原始内容不同:

var tagStripper = new RegExp('<(/)*(meta|link|\\?xml:|st1:|o:|font)(.*?)>', 'gi');

上面的行具有| span |。部分已删除。

// 5. Remove any unwanted styling
// NOTE: Add your own list of 'blacklisted' css attributes here
var badStyling = ['margin-top:', 'margin-bottom:', 'line-height:', 'mso-fareast-font-family:&quot;', 'font-weight:', 'margin:'];
for (var i = 0; i < badStyling.length; i++) {
    attrStripper = new RegExp('(' + badStyling[i] + ')([^;]*)+[^]', 'gm');
    output = output.replace(attrStripper, '');
}

接下来,我添加了此循环,该循环将删除所有不需要的样式标签

var badAttributes = ['start'];

最后,从badAttributes变量中删除样式。

这是种骇客的工作,但这是我唯一能够上班的事情。祝你好运!

答案 1 :(得分:0)

假设

  • 显示的版本按预期工作,
  • 您已确认HTML包含<font color=>,而不是<span style="color:">
  • 你只有regexp的问题

以下命题成立:如果替换

new RegExp('<(/)*(meta|link|span|\\?xml:|st1:|o:|font)(.*?)>','gi');

new RegExp('<(/)*(meta|link|span|\\?xml:|st1:|o:)(.*?)>','gi');

不会从插入的HTML中删除字体标记,您将正确看到颜色。