<template> <div id="articleDetail"> <div class="title">{{ detail.title }}</div> <div class="time">{{ detail.createTime }}</div> <div class="info_ctx_wrap tal" v-for="(html, index) in nodesHtml" :key="index"> <p v-html="html"></p> <img v-if="index < nodesHtml.length - 1" class="img" :src="imgs[index]" /> </div> </div> </template> <script> export default { name: 'Article', data() { return { id: '', detail: '', content: '', //内容 imgs: [], //图片列表 nodesHtml: [], //切割的富文本元素 } }, mounted() { // console.log(this.$route.query) this.id = this.$route.query.id this.getConsultationDetail() }, methods: { // 获取底部栏目资讯 getConsultationDetail() { if (!this.id) return this.yxAxios.post(`${this.proxyUrl}/manage/info/content/detail/${this.id}`).then((res) => { if (res.data.code == 200) { let tempData = res.data.data tempData.createTime = tempData.createTime.slice(0, 10) tempData.content = tempData.content.replace(/\<img/gi, '<img class="rich-img" ') //正则给img标签增加class let nodes = tempData.content console.log('nodes:', nodes) // 定义一个富文本中的图片数组 let imgs = [] //图片 // 定义一个富文本除了图片元素意外的元素 let nodesHtml = [] //切割的富文本元素 if (nodes && nodes.indexOf('src') >= 0) { //当存在src图片才执行 nodes = nodes.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, (match, capture) => { imgs.push(capture) //src的值 console.log(match) console.log(capture) console.log(imgs) this.imgs = imgs return '&**&' //把图片标签提取出来,并替换成&**&,以便后续来使用splic }) // 把nodes中是把img标签替换成&**&的一个标签字符串 nodesHtml = nodes.split('&**&') //切割一下..拿到数组去遍历 // nodesHtml = nodesHtml.slice(0, -1) //最后是一个</p>标签,如果不去掉,最后会多一张图片...因为最后一个是p的闭合标签,去了也罢~ console.log('nodesHtml:', nodesHtml) } else { if (nodes) { nodesHtml.push(nodes) console.log('nodesHtml:', nodesHtml) } else { nodesHtml = ['暂无详情'] } } this.content = nodes this.nodesHtml = nodesHtml this.detail = tempData document.title = this.detail.title } else { this.$toast.fail(res.message) } }) }, }, } </script> <style lang="scss" scoped> #articleDetail { width: 100%; height: 100%; overflow: auto; box-sizing: border-box; padding: 40px; .title { font-size: 36px; text-align: left; margin: 10px; font-weight: bold; } .time { font-size: 24px; color: gray; margin: 10px 0; } /* 基础信息 */ .info_wrap { margin-top: 20px; background-color: white; } .info_ctx_wrap { .img { width: 100%; height: auto; } p { font-size: 28px; letter-spacing: 1px; margin: 20px 0; } } .tac { text-align: center; } .tal { text-align: left; } } </style> <style lang="scss"> // 长辈版 .elder { #articleDetail .title,#articleDetail .time,#articleDetail .info_ctx_wrap p{ font-size: 36px; } } </style>