微信小程序 - 富文本图片宽度自适应(正则)

news/2024/7/1 7:46:01

引言:在微信小程序里,比如商品展示页面的商品详情会有图片展示,PC端设置的商品详情是PC端的宽度,所以在小程序里图片会显示不全,这时就应该做相应的处理,使小程序里图片显示正确

思路

把图片的宽度改为手机屏幕对应的宽度

微信小程序需要知道的知识

需要知道微信小程序里有自己的宽度标准,单位为rpx;

针对所有不同尺寸的浏览器,微信小程序里规定屏幕宽为750rpx;

解决

WXML

<view class='html_detail'><rich-text nodes='{{artical}}'></rich-text>
</view>
复制代码

WXS

data={artical:''}async onLoad(){const json = await api.getDetail();if(json !== null){this.artical = util.formatRichText(json.detail.description);}
}
复制代码

若artical里只有图片,并且图片没有设置style和宽度/高度

util.js

function formatRichText(html){let newContent= html.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;"');return newContent;
}module.exports = {formatRichText
}
复制代码

若artical里包含多种标签

util.js

/*** 处理富文本里的图片宽度自适应* 1.去掉img标签里的style、width、height属性* 2.img标签添加style属性:max-width:100%;height:auto* 3.修改所有style里的width属性为max-width:100%* 4.去掉<br/>标签* @param html* @returns {void|string|*}*/
function formatRichText(html){let newContent= html.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:block;margin-top:0;margin-bottom:0;"');return newContent;
}module.exports = {formatRichText
}
复制代码

http://lihuaxi.xjx100.cn/news/235521.html

相关文章

iOS 支付 [支付宝、银联、微信]

这是开头语 前不久做了一个项目&#xff0c;涉及到支付宝和银联支付&#xff0c;支付宝和银联都是业界的老大哥&#xff0c;文档、SDK都是很屌&#xff0c;屌的找不到&#xff0c;屌的看不懂&#xff0c;屌到没朋友&#xff08;吐槽而已&#xff09;&#xff0c;本文将涉及到的…

Linux下的redis的持久化,主从同步及哨兵

redis持久化 Redis是一种内存型数据库&#xff0c;一旦服务器进程退出&#xff0c;数据库的数据就会丢失&#xff0c; 为了解决这个问题&#xff0c;Redis提供了两种持久化的方案&#xff0c;将内存中的数据保存到磁盘中&#xff0c;避免数据的丢失。 RDB持久化 redis提供了RDB…

CYQ.Data 数据框架系列索引

2019独角兽企业重金招聘Python工程师标准>>> 索引基础导航&#xff1a; 1&#xff1a;下载地址&#xff1a;http://www.cyqdata.com/download/article-detail-426 2&#xff1a;入门教程&#xff1a;http://www.cyqdata.com/cyqdata/article-cate-33 3&#xff1a;购…

Swift - 使用addSubview()方法将StoryBoard中的视图加载进来

使用 Storyboard 我们可以很方便地搭建好各种复杂的页面&#xff0c;同时通过 segue 连接可以轻松实现页面的跳转。但除了segue&#xff0c;我们还可以使用纯代码的方式实现Storyboard界面的跳转。 比如&#xff1a;使用 presentViewController() 方法将当前页面视图切换成新视…

Redis5.0之Stream案例应用解读

2019独角兽企业重金招聘Python工程师标准>>> 非常高兴有机会和大家在这里交流Redis5.0之Stream应用。今天的分享更多的是一个抛砖引玉&#xff0c;欢迎大家提出更多关于Redis的思考。 首先&#xff0c;我们来个假设&#xff0c;这里有个杯子&#xff0c;这个杯子是去…

Swift:闭包

[objc] view plaincopy print?/* 闭包&#xff08;Closures&#xff09; * 闭包是自包含的功能代码块&#xff0c;可以在代码中使用或者用来作为参数传值。 * 在Swift中的闭包与C、OC中的blocks和其它编程语言&#xff08;如Python&#xff09;中的lambdas类似。 * 闭包…

html5小游戏Untangle

2019独角兽企业重金招聘Python工程师标准>>> 今天介绍一个HTML5的小游戏&#xff0c;让大家体验到HTML5带来的乐趣。这个小游戏很简单&#xff0c;只要用鼠标拖动 蓝点&#xff0c;让图上的所有线都不相交&#xff0c;游戏时间就会停止&#xff0c;是动用大家头脑的…

Centos-Mysql配置my.cnf内容

#v1.0 [mysqld] #通用 #skip-grant-tables 跳过授权密码登录 port3306 #使用mysql系统账号操作进程 usermysql socket/var/lib/mysql/mysql.sock #basedir/usr datadir/var/lib/mysql #mysql错误日志 log_error /tmp/ch_mysql_log/error.log #mysql所有操作日志 生产服务器不…