如何从word文档中复制的文本中删除格式

时间:2012-11-08 09:43:18

标签: cleditor

当我从word文档中复制文本时,当我将该文本粘贴到我的网页上的cleditor时,也会复制应用的格式,这是我们的rails应用程序。

1 个答案:

答案 0 :(得分:2)

cleditor google groups seems to have the answer:

  

以下是我用于updateTextArea的扩展程序,其中包含   过滤Microsoft word if / endif garbage并规范化   标签为xhtml / html5友好组合:   BR | B |德尔|插件| I |李|醇| P | UL

(function($) {
 $.cleditor.defaultOptions.docType = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>";
 $.cleditor.defaultOptions.docCSSFile = AkmeWindowUtil.CONTEXT_PATH+"/embed/cleditor/jquery.cleditor.iframe.css";

 $.cleditor.defaultOptions.updateTextArea = function(html) { //if (document.forms[0].debugArea) document.forms[0].debugArea.value = html;
  // Normalize to xhtml/html5 common standards and only keep allowed tags.
  var ary = html.split("<");
  var end = -1;
  for (var i=0; i<ary.length; i++) {
   if (ary[i].lastIndexOf("!--[if ", 7) === 0) { // handle Microsoft <!--[if ... <![endif]-->
    ary[i] = "";
    var found = false;
    for (i++; i<ary.length; i++) {
     if (ary[i].lastIndexOf("![endif]-->", 11) === 0) {found = true;}
     ary[i] = "";
     if (found) break;
    }
    if (i>=ary.length) break;
   }
   end = ary[i].indexOf(">");
   if (end == -1) continue;
   ary[i] = ary[i].substring(0,end).toLowerCase()+ary[i].substring(end);
   var search = ["strong>","em>","strike>","u>","br>"];
   var replace = ["b>","i>","del>","ins>","br/>"];
   for (var j=0; j<search.length; j++) {
    var pos = ary[i].lastIndexOf(search[j], search[j].length+1);
    if (pos == 0 || (pos == 1 && ary[i].charAt(0) == '/')) {
     ary[i] = (pos == 1 ? "/" : "")+ replace[j] +ary[i].substring(search[j].length+pos);
    }
   }
   var spellcheckerRE = /^\/?span[^\/>]*\/?>/m;
   var cleanupRE = /^(\/?)(br|b|del|ins|i|li|ol|p|ul)[^a-zA-Z\/>]*[^\/>]*(\/?)>/m;
   if (spellcheckerRE.test(ary[i])) {
    ary[i] = ary[i].replace(spellcheckerRE, "");
   } else if (cleanupRE.test(ary[i])) {
    ary[i] = ary[i].replace(cleanupRE, "<$1$2$3>");
    ary[i] = ary[i].replace(/^<p>/, "");
    ary[i] = ary[i].replace(/^<\/?p\/?>/, "<br/>");
   } else {
    ary[i] = end+1 < ary[i].length ? ary[i].substring(end+1) : "";
   }
   ary[i] = ary[i].replace(/&nbsp;/gm, "");
   ary[i] = ary[i].replace(/\n\n/gm, "\n");
  }
  html = ary.join("");
  // Trim leading whitespace.
  var trimRE = /^(\s+|&nbsp;|<br\/?>|<p>(&nbsp;)*<\/p>)+/m;
  if (trimRE.test(html)) {
   html = html.replace(trimRE, "");
  }
  // Test if there is any actual non-whitespace text content.
  var body = document.getElementsByTagName("body")[0];
  var div = document.createElement("div");
  div.style.display = "none";
  body.appendChild(div);
  div.innerHTML = html;
  var text = div.innerText || div.textContent;
  body.removeChild(div);
  var trimRE = /\S/m;
  if (!trimRE.test(text)) html = "";
  return html;
 };
})(jQuery);