formathtml.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. function formatHTML(str){
  2. var remainInStr=str.replace(/<(strong|b|u|i|em|span|font)[^>]*><\/\1>/ig,''),
  3. outStr='',
  4. ubbReg= new RegExp('\\s*(<(\\/?)([a-z]\\w*)[^>]*>)[\\r\\n]*','im'),
  5. indentChars=[],
  6. wrapOutTags={'table':1,'tbody':1,'thead':1,'tfoot':1,'tr':1,'td':1,'p':1,'caption':1,'div':1,'object':1,'param':1,'embed':1,'dl':1,'dd':1,'dt':1,'ul':1,'ol':1,'li':1,'hr':1,'script':1},
  7. indentTags={'table':1,'tbody':1,'thead':1,'tfoot':1,'tr':1,'object':1,'dl':1,'ul':1,'ol':1,'div':1,'script':1},
  8. embedTags={'a':1,'u':1,'i':1,'b':1,'strong':1,'em':1,'font':1,'span':1,'img':1,'input':1,'h1':1,'h2':1,'h3':1,'h4':1,'h5':1,'h6':1}, //±£³Ö²»±äµÄ±êÇ©
  9. text,tagExt,tagFull,isEndTag,tagName;
  10. while( null != (result = ubbReg.exec(remainInStr))){
  11. text = remainInStr.substr(0, result.index);
  12. tagExt= result[0];
  13. tagFull=result[1];
  14. isEndTag = '/'===result[2];
  15. tagName=result[3].toLowerCase();
  16. remainInStr = remainInStr.substr(result.index + tagExt.length);
  17. outStr += text;
  18. if(isEndTag){
  19. if(indentTags[tagName]) indentChars.pop();
  20. if(embedTags[tagName]) outStr += tagExt;
  21. else if(indentTags[tagName]) outStr +="\n"+indentChars.join('')+tagFull;
  22. else outStr += tagFull ;
  23. if(wrapOutTags[tagName]) outStr+="\n";
  24. }else{
  25. if(wrapOutTags[tagName]) outStr+="\n";
  26. if(embedTags[tagName]) outStr += tagExt;
  27. else if(indentTags[tagName]) outStr += indentChars.join('')+tagFull+"\n";
  28. else outStr += indentChars.join('')+tagFull;
  29. if('hr'===tagName || 'br'===tagName) outStr+="\n";
  30. if(indentTags[tagName]) indentChars.push(' ');
  31. }
  32. }
  33. outStr += remainInStr;
  34. outStr = outStr.replace(/\n+/g, "\n").replace(/^[ \n\r\t]+/g, "").replace(/[ \n\r\t]+$/g, "").replace(/<td([^>]*)>\s+<br/ig, "<td$1 ><br").replace(/<br>\s+<\/td>/ig, "<br></td>");
  35. if('<p>&nbsp;</p>'===outStr || '<br>'===outStr) outStr='';
  36. return outStr;
  37. }