Как убрать форматирование из текста скопированного из текстового документа
Когда я копирую текст из текстового документа, применяемое форматирование также копируется, когда я вставляю этот текст в cleditor на моей веб-странице. Это наше приложение rails.
1 ответ
Кажется, у ответчика группы Google есть ответ:
Ниже приведено расширение, которое я использую для updateTextArea, которое включает в себя фильтрацию слова Microsoft if / endif мусора и нормализацию тегов к комбинации дружественных для xhtml / html5: br|b|del|ins|i|li|ol|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(/ /gm, "");
ary[i] = ary[i].replace(/\n\n/gm, "\n");
}
html = ary.join("");
// Trim leading whitespace.
var trimRE = /^(\s+| |<br\/?>|<p>( )*<\/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);