共计 2797 个字符,预计需要花费 7 分钟才能阅读完成。
在获取富文本后,又只要显示部分内容,需要去除富文本标签,然后再截取其中一部分内容;然后就是过滤器,在微信小程序中使用还是挺多次的,在 vue 及 react 中也遇到过
1. 富文本去除 html 标签
去除 html 标签及 空格
let richText = ‘ <p style=”font-size: 25px;color: white”> sdaflsjf 的丰富及饿哦塞尔 </p><span>dsfjlie</span>’;
/* 去除富文本中的 html 标签 */
/* *、+ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个? 就可以实现非贪婪或最小匹配。*/
let content = richText.replace(/<.+?>/g, ”);
console.log(content);
/* 去除 */
content = content.replace(/ /ig, ”);
console.log(content);
/* 去除空格 */
content = content.replace(/\s/ig, ”);
console.log(content);
截取字符串
content = formatRichText(content);
console.log(content);
/* 使用 substring 来截取字符串 */
if (content.length > 10) {
content = content.substring(0, 10) + ‘…’;
}
console.log(content);
/* 限制字数后添加省略号 */
function formatRichText(richText) {
let temporaryText = ”;
/* 设置多长后添加省略号 */
const len = 142;
if (richText.length * 2 <= len) {
return richText;
}
/* 用于记录文字内容的总长度 */
let strLength = 0;
for (let i = 0; i < richText.length; i++) {
temporaryText = temporaryText + richText.charAt(i);
/* charCodeAt() 返回指定位置的字符的 Unicode 编码,值为 128 以下时一个字符占一位,当值在 128 以上是一个字符占两位 */
if (richText.charCodeAt(i) > 128) {
strLength = strLength + 2;
if (strLength >= len) {
return temporaryText.substring(0, temporaryText.length – 1) + “…”;
}
} else {
strLength = strLength + 1;
if (strLength >= len) {
return temporaryText.substring(0, temporaryText.length – 2) + “…”;
}
}
}
return temporaryText;
}
2.vue 中使用过滤器
filters: {
localData(value) {
let date = new Date(value * 1000);
let Month = date.getMonth() + 1;
let Day = date.getDate();
let Y = date.getFullYear() + ‘ 年 ’;
let M = Month < 10 ? ‘0’ + Month + ‘ 月 ’ : Month + ‘ 月 ’;
let D = Day + 1 < 10 ? ‘0’ + Day + ‘ 日 ’ : Day + ‘ 日 ’;
let hours = date.getHours();
let minutes = date.getMinutes();
let hour = hours < 10 ? ‘0’ + hours + ‘:’ : hours + ‘:’;
let minute = minutes < 10 ? ‘0’ + minutes : minutes;
return Y + M + D + ‘ ‘ + hour + minute;
}
}
/* 使用,直接在 div 中添加就可以了,| 前面的是参数,后面的是过滤器 */
<div class=”time”>{{data.etime | localData}}</div>
3. 微信小程序中使用过滤器
新建.wxs 文件
var localData = function (value) {
var date = getDate(value * 1000);
var Month = date.getMonth() + 1;
var Day = date.getDate();
var hours = date.getHours(); // 计算剩余的小时
var minutes = date.getMinutes(); // 计算剩余的分钟
var Y = date.getFullYear() + ‘-‘;
var M = Month < 10 ? ‘0’ + Month + ‘-‘ : Month + ‘-‘;
var D = Day + 1 < 10 ? ‘0’ + Day + ” : Day + ”;
var H = hours < 10 ? ‘0’ + hours + ‘:’ : hours + ‘:’
var m = minutes < 10 ? ‘0’ + minutes : minutes;
return Y+M + D + ” ” + H + m;
}
module.exports = {
localData: localData
}
使用, 用 <wxs /> 标签来引入,src 为路径,module 为引入的文件模块名
<wxs src=”./filters.wxs” module=”tool” />
<text class=”scoreText”>{{tool.filterScore(item.shop.score)}} 分 </text>
直接在.wxml 文件中用 <wxs></wxs> 包裹
<wxs module=”foo”>
var some_msg = “hello world”;
module.exports = {
msg : some_msg,
}
</wxs>
<view> {{foo.msg}} </view>
4.react 中使用
react 中使用,其实就是定义一个方法
import noBanner from ‘@/assets/storeDetail/no-banner.jpg’
const filterImg = item => {
let bgImg;
if (item.shopimages == null) {
bgImg = noBanner;
} else {
bgImg = item.shopimages[0];
}
return bgImg;
};
/* 使用 */
<img src={filterImg(storeitem)} className={style.topImg} alt=”” />
正在努力学习中,若对你的学习有帮助,留下你的印记呗(点个赞咯 ^_^)
往期好文推荐:
判断 iOS 和 Android 及 PC 端
纯 css 实现瀑布流(multi-column 多列及 flex 布局)
实现多行文字及单行的省略号
微信小程序之购物车和父子组件传值及 calc 的注意事项