去除富文本中的html标签及vue、react、微信小程序中的过滤器

爱⌒轻易说出口 提交于 2021-02-15 00:58:13

<blockquote>在获取富文本后,又只要显示部分内容,需要去除富文本标签,然后再截取其中一部分内容;然后就是过滤器,在微信小程序中使用还是挺多次的,在vue及react中也遇到过</blockquote> <h1>1.富文本去除html标签</h1> <ul><li>去除html标签及 空格</li></ul>


let richText = ' &lt;p style="font-size: 25px;color: white"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sdaflsjf的丰富及饿哦塞尔&lt;/p&gt;&lt;span&gt;dsfjlie&lt;/span&gt;';

/* 去除富文本中的html标签 */
/* *、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。*/
let content = richText.replace(/&lt;.+?&gt;/g, '');
console.log(content);

/* 去除&amp;nbsp; */
content = content.replace(/&amp;nbsp;/ig, '');
console.log(content);

/* 去除空格 */
content = content.replace(/\s/ig, '');
console.log(content);

<ul><li>截取字符串</li></ul>


content = formatRichText(content);
console.log(content);

/* 使用substring来截取字符串 */
if (content.length &gt; 10) {
    content = content.substring(0, 10) + '...';
}
console.log(content);

/* 限制字数后添加省略号 */
function formatRichText(richText) {
    let temporaryText = '';
    /* 设置多长后添加省略号 */
    const len = 142;
    if (richText.length * 2 &lt;= len) {
        return richText;
    }
    /* 用于记录文字内容的总长度 */
    let strLength = 0;
    for (let i = 0; i &lt; richText.length; i++) {
        temporaryText = temporaryText + richText.charAt(i);
        /* charCodeAt()返回指定位置的字符的Unicode编码,值为128以下时一个字符占一位,当值在128以上是一个字符占两位 */
        if (richText.charCodeAt(i) &gt; 128) {
            strLength = strLength + 2;
            if (strLength &gt;= len) {
                return temporaryText.substring(0, temporaryText.length - 1) + "...";
            }
        } else {
            strLength = strLength + 1;
            if (strLength &gt;= len) {
                return temporaryText.substring(0, temporaryText.length - 2) + "...";
            }
        }
    }
    return temporaryText;
}

<h1>2.vue中使用过滤器</h1>


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 &lt; 10 ? '0' + Month + '月' : Month + '月';
        let D = Day + 1 &lt; 10 ? '0' + Day + '日' : Day + '日';
        let hours = date.getHours();
        let minutes = date.getMinutes();
        let hour = hours &lt; 10 ? '0' + hours + ':' : hours + ':';
        let minute = minutes &lt; 10 ? '0' + minutes : minutes;
        return Y + M + D + ' ' + hour + minute;
    }
}

/* 使用,直接在div中添加就可以了,| 前面的是参数,后面的是过滤器 */
&lt;div class="time"&gt;{{data.etime | localData}}&lt;/div&gt;

<h1>3.微信小程序中使用过滤器</h1> <ul><li>新建.wxs文件</li></ul>


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 &lt; 10 ? '0' + Month + '-' : Month + '-';
    var D = Day + 1 &lt; 10 ? '0' + Day + '' : Day + '';
    var H = hours &lt; 10 ? '0' + hours + ':' : hours + ':'
    var m = minutes &lt; 10 ? '0' + minutes : minutes;
    return Y+M + D + "   " + H + m;
}
module.exports = {
    localData: localData
}

<ul><li>使用,用&lt;wxs /&gt;标签来引入,src为路径,module为引入的文件模块名</li></ul>


&lt;wxs src="./filters.wxs" module="tool" /&gt;
&lt;text class="scoreText"&gt;{{tool.filterScore(item.shop.score)}}分&lt;/text&gt;

<ul><li>直接在.wxml文件中用&lt;wxs&gt;&lt;/wxs&gt;包裹</li></ul>


&lt;wxs module="foo"&gt;
var some_msg = "hello world";
module.exports = {
    msg : some_msg,
}
&lt;/wxs&gt;
&lt;view&gt; {{foo.msg}} &lt;/view&gt;

<h1>4.react中使用</h1> <ul><li>react中使用,其实就是定义一个方法</li></ul>


import noBanner from '@/assets/storeDetail/no-banner.jpg'
const filterImg = item =&gt; {
    let bgImg;
    if (item.shopimages == null) {
        bgImg = noBanner;
    } else {
        bgImg = item.shopimages[0];
    }
    return bgImg;
};
/* 使用 */  
&lt;img src={filterImg(storeitem)} className={style.topImg} alt="" /&gt;

<blockquote>正在努力学习中,若对你的学习有帮助,留下你的印记呗(点个赞咯^_^)</blockquote> <ul><li> <p>往期好文推荐:</p> <ul> <li><a href="https://segmentfault.com/a/1190000016542821">判断iOS和Android及PC端</a></li> <li><a href="https://segmentfault.com/a/1190000016255824">纯css实现瀑布流(multi-column多列及flex布局)</a></li> <li><a href="https://segmentfault.com/a/1190000016686869">实现多行文字及单行的省略号</a></li> <li><a href="https://segmentfault.com/a/1190000016989779">微信小程序之购物车和父子组件传值及calc的注意事项</a></li> </ul> </li></ul>

原文地址:https://segmentfault.com/a/1190000017075338

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!