使用javascript(从Word粘贴功能)将MS Word特定标签和样式转换为HTML

时间:2017-10-23 13:22:16

标签: javascript html css ms-word

我正在开发一个文本编辑器,我想提供一个名为“从Word粘贴”的选项。

关于我正在使用的文字编辑器:

文本编辑器完全基于HTML 5,CSS和Javascript。现在我想提供一个名为“从Word粘贴”的选项。

我使用的是什么:

我在GitHub上找到了一些解决方案,下面是我试图删除所有与MS-Word相关的类(如 MSoNormal )和与MS-Word相关的标签(如 w:sdt < /强>):

我试过的代码:

function CleanWordHTML(str) {
str = str.replace(/<o:p>\s*<\/o:p>/g, "");
str = str.replace(/<o:p>.*?<\/o:p>/g, "&nbsp;");
str = str.replace(/\s*mso-[^:]+:[^;"]+;?/gi, "");
str = str.replace(/\s*MARGIN: 0cm 0cm 0pt\s*;/gi, "");
str = str.replace(/\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"");
str = str.replace(/\s*TEXT-INDENT: 0cm\s*;/gi, "");
str = str.replace(/\s*TEXT-INDENT: 0cm\s*"/gi, "\"");
str = str.replace(/\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"");
str = str.replace(/\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"");
str = str.replace(/\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"");
str = str.replace(/\s*tab-stops:[^;"]*;?/gi, "");
str = str.replace(/\s*tab-stops:[^"]*/gi, "");
str = str.replace(/\s*face="[^"]*"/gi, "");
str = str.replace(/\s*face=[^ >]*/gi, "");
str = str.replace(/\s*FONT-FAMILY:[^;"]*;?/gi, "");
str = str.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3");
str = str.replace(/<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3");
str = str.replace(/\s*style="\s*"/gi, '');
str = str.replace(/<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;');
str = str.replace(/<SPAN\s*[^>]*><\/SPAN>/gi, '');
str = str.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
str = str.replace(/<SPAN\s*>(.*?)<\/SPAN>/gi, '$1');
str = str.replace(/<FONT\s*>(.*?)<\/FONT>/gi, '$1');
str = str.replace(/<\\?\?xml[^>]*>/gi, "");
str = str.replace(/<\/?\w+:[^>]*>/gi, "");
str = str.replace(/<H\d>\s*<\/H\d>/gi, '');
str = str.replace(/<H1([^>]*)>/gi, '');
str = str.replace(/<H2([^>]*)>/gi, '');
str = str.replace(/<H3([^>]*)>/gi, '');
str = str.replace(/<H4([^>]*)>/gi, '');
str = str.replace(/<H5([^>]*)>/gi, '');
str = str.replace(/<H6([^>]*)>/gi, '');
str = str.replace(/<\/H\d>/gi, '<br>'); //remove this to take out breaks where Heading tags were 
str = str.replace(/<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;');
str = str.replace(/<(B|b)>&nbsp;<\/\b|B>/g, '');
str = str.replace(/<([^\s>]+)[^>]*>\s*<\/\1>/g, '');
str = str.replace(/<([^\s>]+)[^>]*>\s*<\/\1>/g, '');
str = str.replace(/<([^\s>]+)[^>]*>\s*<\/\1>/g, '');
//some RegEx code for the picky browsers
var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)", "gi");
str = str.replace(re, "<div$2</div>");
var re2 = new RegExp("(<font|<FONT)([^*>]*>.*?)(<\/FONT>|<\/font>)", "gi");
str = str.replace(re2, "<div$2</div>");
str = str.replace(/size|SIZE = ([\d]{1})/g, '');
return str;
}

我想要实现的目标:

在从MS-Word粘贴到我的文本编辑器中时,我需要将以下内容替换为相应的HTML样式和标记:

  1. 删除与MS-Word相关的HTML标记,例如 w:sdt
  2. 从元素中删除类(如下所示):

    风格=“MSO的元件:对 - 边界的div;边界:无;边界底部:实心   #EA4E4E 6.0pt; mso-border-bottom-themecolor:accent1; padding:0cm 0cm 1.0pt 0cm“

  3. 将粘贴的内容从与MS-Word相关的样式中解放出来,但是格式化应由HTML保留,并具有相应的替换。

  4. 注意:

    我尝试过查看很多网站,但找不到任何插件或任何解决方案。 即使开始使用我自己的javascript来实现此功能,我也不知道MS-Word使用的所有类和标签是什么。

    总的来说,我需要将MS-Word相关标签和样式替换为HTML内容的功能,并删除与MS-Word相关的标签和样式。

    提前致谢。

0 个答案:

没有答案