思路解析
- 通过接口获取富文本内容,判断有无内容
- 设定几个初始值 random:记录img的序号,imgUrls 记录所有的img的数组
- 匹配img标签,放到match中
- match中再次匹配src标签,获取img的链接,并拼接 random 序号,值为random,可作为页码值
- 最后输出数组,包含俩个参数 html, imgUrls
方法 utils 文件
/**
* 从富文本中给图片链接添加 random 并且返回图片数组
* @example let [html, imgUrls] = addRandomAndGetPreviewImageUrlsFromRichText(html)
* @param {string} html
*/
const addRandomAndGetPreviewImageUrlsFromRichText = html => {
// 如果没有值的话,直接返回
if (!html) {
return html;
}
let randomIndex = 0;
let imgUrls = [];
// 先匹配到 img 标签,放到 match 里
html = html.replace(/
]*>/gim, function(match) {
randomIndex++;
match = match
.replace(/src="[^"]+"/gim, function(match) {
// 再匹配到 src 标签 '"'
let src = match.replace('src=', '').replace(/"/g, '') + '?random=' + randomIndex; // 取到 src 里面的 url
imgUrls.push(src);
return 'src="' + src + '"';
})
.replace(/src='[^']+'/gim, function(match) {
console.log(match);
// 再匹配到 src 标签 "'"
let src = match.replace('src=', '').replace(/'/g, '') + '?random=' + randomIndex;
imgUrls.push(src);
return "src='" + src + "'";
});
return match;
});
return [html, imgUrls];
};
module.exports = {
addRandomAndGetPreviewImageUrlsFromRichText: addRandomAndGetPreviewImageUrlsFromRichText,
};
使用
export default {
data() {
return {
articleInfo: {},
richImages: [],
}
},
mounted() {
this.getNewsContent();
},
methods: {
// 图片预览
previewImage(e) {
console.log(e, 'e');
if (e.target.tagName == 'IMG') {
this.$ImagePreview({
images: this.richImages,
closeable: true,
startPosition: e.target.src.split('random=')[1] - 1,
closeOnPopstate: true, //页面回退关闭预览
});
}
},
// 获取富文本内容
getNewsContent() {
....
// 返回值等于内容 this.articleInfo.contentHtml
[this.articleInfo.contentHtml, this.richImages] = util.addRandomAndGetPreviewImageUrlsFromRichText(this.articleInfo.contentHtml);
}
}
}