问题描述:
在反显富文本的图片时候会存在以下问题:
1、富文本图片太大的时候,会溢出无法自适应;
2、统一给img样式的时候,由于css的优先级原因会存在失效的情况;
解决思路:
富文本的本质就是字符串,所以只需要全局替换富文本中字符串中含有img标签,同时在img标签上加上相应的行内样式,样式可根据具体的需求和设计稿进行编写;
步骤分别是:
- 1.去掉img标签里的style、width、height属性
- 2.img标签添加style属性:max-width:100%;height:auto
- 3.修改所有style里的width属性为max-width:100%
- 4.去掉br标签
示例代码:
vue template:(这边增加一个&&的容错,防止有replace的报错)
1 2 3 4
| <div class="txt" v-html="news.resourceContext && imgTagAddStyle(news.resourceContext)" ></div>
|
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ... methods: { imgTagAddStyle (htmlstr) { let newContent = htmlstr.replace(/<img[^>]*>/gi, function (match, capture) { match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '') match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '') match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '') return match }) newContent = newContent.replace(/style="[^"]+"/gi, function (match, capture) { match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;') return match }) newContent = newContent.replace(/<br[^>]*\/>/gi, '') newContent = newContent.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:inline-block;margin:8px 0;"') return newContent } } ...
|