autoformat.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. //格式化
  2. function formatText(editor,sj,zt,zh) {
  3. var myeditor = editor;
  4. if (myeditor.mode == "wysiwyg") {
  5. var tempimg = new Array();
  6. var temptable = new Array();
  7. var tempobject = new Array();
  8. var isPart = false; //暂时无法实现局部格式化
  9. if (!isPart) {
  10. var tmpDiv = document.createElement("DIV");
  11. var editorhtml = myeditor.getData();
  12. editorhtml = editorhtml.replace(
  13. /<div style="page-break-after: always;?">\s*<span style="display: none;?">&nbsp;<\/span>\s*<\/div>/gi,
  14. "<p>[page]</p>"
  15. ); //将div span标签替换为p 标签
  16. tmpDiv.innerHTML = editorhtml
  17. .replace(/&nbsp;/gi, "")
  18. .replace(/<div/gi, "<p")
  19. .replace(/<\/div/gi, "</p"); //移除空格标签,div替换为p标签。
  20. if (
  21. window.navigator.userAgent.toLowerCase().indexOf("msie") > 0
  22. ) {
  23. tmpDiv.innerHTML = tmpDiv.innerHTML.replace(
  24. /<\/p>/gi,
  25. "<br /></p>"
  26. ); //每个段落相隔一行
  27. }
  28. var tables = tmpDiv.getElementsByTagName("TABLE");
  29. if (tables != null && tables.length > 0) {
  30. for (var j = 0; j < tables.length; j++) {
  31. temptable[temptable.length] = tables[j].outerHTML;
  32. }
  33. var formattableCount = 0;
  34. for (var j = 0; j < tables.length; ) {
  35. tables[j].outerHTML =
  36. "#FormatTableID_" + formattableCount + "#";
  37. formattableCount++;
  38. }
  39. }
  40. var objects = tmpDiv.getElementsByTagName("OBJECT");
  41. if (objects != null && objects.length > 0) {
  42. for (var j = 0; j < objects.length; j++) {
  43. tempobject[tempobject.length] = objects[j].outerHTML;
  44. }
  45. var formatobjectCount = 0;
  46. for (var j = 0; j < objects.length; ) {
  47. objects[j].outerHTML =
  48. "#FormatObjectID_" + formatobjectCount + "#";
  49. formatobjectCount++;
  50. }
  51. }
  52. var imgs = tmpDiv.getElementsByTagName("IMG");
  53. if (imgs != null && imgs.length > 0) {
  54. for (var j = 0; j < imgs.length; j++) {
  55. var t = document.createElement("IMG");
  56. t.alt = imgs[j].alt;
  57. t.src = imgs[j].src;
  58. t.width = imgs[j].width;
  59. t.height = imgs[j].height;
  60. t.align = imgs[j].align;
  61. tempimg[tempimg.length] = t;
  62. }
  63. var formatImgCount = 0;
  64. for (var j = 0; j < imgs.length; ) {
  65. imgs[j].outerHTML =
  66. "#FormatImgID_" + formatImgCount + "#";
  67. formatImgCount++;
  68. }
  69. }
  70. var strongarray = new Array();
  71. var strongcount = 0;
  72. for (
  73. var i = 0;
  74. i < tmpDiv.getElementsByTagName("b").length;
  75. i++
  76. ) {
  77. strongarray[strongcount] = tmpDiv
  78. .getElementsByTagName("b")
  79. [i].innerText.trim();
  80. tmpDiv.getElementsByTagName("b")[i].innerHTML =
  81. "#FormatStrongID_" + strongcount + "#";
  82. strongcount++;
  83. }
  84. for (
  85. var i = 0;
  86. i < tmpDiv.getElementsByTagName("strong").length;
  87. i++
  88. ) {
  89. strongarray[strongcount] = tmpDiv
  90. .getElementsByTagName("strong")
  91. [i].innerText.trim();
  92. tmpDiv.getElementsByTagName("strong")[i].innerHTML =
  93. "#FormatStrongID_" + strongcount + "#";
  94. strongcount++;
  95. }
  96. var html = processFormatText(tmpDiv.innerText,sj,zt,zh);
  97. html = html.replace(
  98. /<p>\[page\]<\/p>/gi,
  99. '<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>'
  100. ); //p标签替换回原来的div和span标签。
  101. if (temptable != null && temptable.length > 0) {
  102. for (var j = 0; j < temptable.length; j++) {
  103. var tablehtml = temptable[j];
  104. html = html.replace(
  105. "#FormatTableID_" + j + "#",
  106. tablehtml
  107. );
  108. }
  109. }
  110. if (tempobject != null && tempobject.length > 0) {
  111. for (var j = 0; j < tempobject.length; j++) {
  112. var objecthtml =
  113. '<p align="center">' + tempobject[j] + "</p>";
  114. html = html.replace(
  115. "#FormatObjectID_" + j + "#",
  116. objecthtml
  117. );
  118. }
  119. }
  120. if (tempimg != null && tempimg.length > 0) {
  121. for (var j = 0; j < tempimg.length; j++) {
  122. var imgheight = "";
  123. var imgwidth = "";
  124. if (tempimg[j].height != 0)
  125. imgheight = ' height="' + tempimg[j].height + '"';
  126. if (tempimg[j].width != 0)
  127. imgwidth = ' width="' + tempimg[j].width + '"';
  128. var imgalign = "";
  129. if (tempimg[j].align != "")
  130. imgalign = ' align="' + tempimg[j].align + '"';
  131. var imghtml =
  132. '<p align="center"><img src="' +
  133. tempimg[j].src +
  134. '" alt="' +
  135. tempimg[j].alt +
  136. '"' +
  137. imgwidth +
  138. " " +
  139. imgheight +
  140. ' align="' +
  141. tempimg[j].align +
  142. '" border="0"></p><p>&nbsp;</p><p>&nbsp;</p>';
  143. html = html.replace("#FormatImgID_" + j + "#", imghtml);
  144. }
  145. }
  146. for (var i = 0; i < strongcount; i++) {
  147. html = html.replace(
  148. "#FormatStrongID_" + i + "#",
  149. "<p><span style='font-family:"+zt+";'><span style='font-size:"+zh+"px;'><strong>" + strongarray[i] + "</strong></span></span></p>"
  150. );
  151. }
  152. while (html.indexOf("</p></p>") != -1)
  153. html = html.replace("</p></p>", "</p>");
  154. while (html.indexOf('<p><p align="center">') != -1)
  155. html = html.replace(
  156. '<p><p align="center">',
  157. '<p align="center">'
  158. );
  159. editor.setData(html);
  160. } else {
  161. }
  162. } else {
  163. alert("必须在设计模式下操作!");
  164. }
  165. }
  166. function processFormatText(textContext,sj,zt,zh) {
  167. var text = dbc2Sbc(textContext);
  168. var prefix = "";
  169. var tmps = text.split("\n");
  170. var html = "";
  171. for (var i = 0; i < tmps.length; i++) {
  172. var tmp = tmps[i].trim();
  173. if (tmp.length > 0) {
  174. var reg = /#Format[A-Za-z]+_\d+#/gi;
  175. var f = reg.exec(tmp);
  176. /* if (f != null) {
  177. tmp = tmp.replace(/#Format[A-Za-z]+_\d+#/gi, "");
  178. html += f;
  179. if (tmp != "")
  180. html += '<p align="center">' + tmp + "</p>\n";
  181. } else {html += "<p style='text-indent:"+sj+"em;'><span style='font-family:"+zt+";'><span style='font-size:"+zh+"px;'>" + tmp + "</span></span></p>\n";}*/
  182. html += "<p style='text-indent:"+sj+"em;'><span style='font-family:"+zt+";'><span style='font-size:"+zh+"px;'>" + tmp + "</span></span></p>\n";
  183. }
  184. }
  185. return html;
  186. }
  187. function dbc2Sbc(str) {
  188. var result = "";
  189. for (var i = 0; i < str.length; i++) {
  190. var code = str.charCodeAt(i);
  191. // “65281”是“!”,“65373”是“}”,“65292”是“,”。不转换","
  192. if (
  193. code >= 65281 &&
  194. code < 65373 &&
  195. code != 65292 &&
  196. code != 65306
  197. ) {
  198. // “65248”是转换码距
  199. result += String.fromCharCode(str.charCodeAt(i) - 65248);
  200. } else {
  201. result += str.charAt(i);
  202. }
  203. }
  204. return result;
  205. }
  206. String.prototype.trim = function() {
  207. return this.replace(/(^[\s ]*)|([\s ]*$)/g, "");
  208. };
  209. String.prototype.leftTrim = function() {
  210. return this.replace(/(^\s*)/g, "");
  211. };
  212. String.prototype.rightTrim = function() {
  213. return this.replace(/(\s*$)/g, "");
  214. };