htmlProcessor.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /**
  2. * HTML内容处理工具 - 小程序版本
  3. * 用于处理富文本内容中的格式问题
  4. */
  5. /**
  6. * 处理HTML内容
  7. * @param {string} htmlContent - 原始HTML内容
  8. * @returns {string} 处理后的HTML内容
  9. */
  10. function processHtmlContent(htmlContent) {
  11. if (!htmlContent) return ''
  12. let processedContent = htmlContent
  13. // 1. 处理段落中的前导空格,转换为缩进
  14. processedContent = processedContent.replace(/<p>\s+([^<]*)<\/p>/g, '<p class="indent">$1</p>')
  15. // 2. 处理段落内部的多个连续空格
  16. processedContent = processedContent.replace(
  17. /<p>([^<]*?)\s{2,}([^<]*?)<\/p>/g,
  18. '<p><span class="indent-text">$1</span>$2</p>',
  19. )
  20. // 3. 处理图片容器,添加统一的样式类
  21. processedContent = processedContent.replace(
  22. /<div class="media-wrap image-wrap"><img src="([^"]*)"/g,
  23. '<div class="media-wrap image-wrap processed-image"><img src="$1" class="content-image"',
  24. )
  25. // 4. 处理音频容器(如果有的话)
  26. processedContent = processedContent.replace(
  27. /<div class="media-wrap audio-wrap">/g,
  28. '<div class="media-wrap audio-wrap processed-audio">',
  29. )
  30. // 5. 处理视频容器(如果有的话)
  31. processedContent = processedContent.replace(
  32. /<div class="media-wrap video-wrap">/g,
  33. '<div class="media-wrap video-wrap processed-video">',
  34. )
  35. // 6. 移除空的段落标签
  36. processedContent = processedContent.replace(/<p><\/p>/g, '')
  37. // 7. 处理图片的alt属性
  38. processedContent = processedContent.replace(
  39. /<img([^>]*?)src="([^"]*?)"([^>]*?)\/?>/g,
  40. '<img$1src="$2" alt="内容图片" loading="lazy"$3/>',
  41. )
  42. return processedContent
  43. }
  44. /**
  45. * 获取处理HTML内容的CSS样式类名映射
  46. * @returns {object} 样式类名映射对象
  47. */
  48. function getHtmlContentStyleClasses() {
  49. return {
  50. indent: 'html-indent',
  51. indentText: 'html-indent-text',
  52. processedImage: 'html-processed-image',
  53. contentImage: 'html-content-image',
  54. processedAudio: 'html-processed-audio',
  55. processedVideo: 'html-processed-video',
  56. mediaWrap: 'html-media-wrap'
  57. }
  58. }
  59. module.exports = {
  60. processHtmlContent,
  61. getHtmlContentStyleClasses
  62. }