编辑器、论坛、评论列表图文混排的一些思路

news2024/11/27 10:43:16

好久没写帖子了,今天写一个吧
众所众知从用户那里拿到的数据直接innerHtml插入 有被xss攻击的风险,所以一般会转义,拿csdn编辑文章的来举个例子
通过前端转义 ‘>’后,传给后台;这里title没有用innerHtml而是文本所以不需要转义。
在这里插入图片描述
前端请求展示时,后台原封不动的返回;
在这里插入图片描述

在这里插入图片描述

比如上面这种比较复杂的论坛帖,评论列表,如果做前后端分离,每个楼层用户都能发图片,文字,视频,音乐和表情包等;并且有管理员功能。比如图片或者文字有审核状态。删除状态,仅本人可见状态等,都需要前端做复杂的交互。
而且把所有楼层数据以html标签传递。后台压测估计过不了;前端做懒加载,分页,虚拟列表等的性能优化都需要图片的宽高,楼层宽高。这个背景下。前端就要把数据分开传给后台。后台分开传给前端。

假设这是后台传给前端的数据

{

content:{
	<div>这里是xxx,[[::img id='123456'::]]这里是图文混排[[::img id='123456'::]] 
	<P >DDDDDD</P>[[::video id='123456'::]]
	<div>

}
image:[
//图片的信息,审核状态等
		{id:'123456',url:'xxxxx',width:300,height:400, state:2},
		{id:'123456',url:'xxxxx',width:300,height:400, state:0}
		]
video:{...}
}

前端拿到数据后,content 可以为图文的排序位置。然后通过正则替换相应的html。
如果是js 直接替换代码。如果是vue组件,里面有各种功能。这个时候有两种方式,一种是比较简单粗暴。把组件放在容器外部隐藏起来,起一个id,等页面挂载后组件也渲染好了。直接用js替换到相应的容器中;第二种就是new vue()去手动挂载。

//举例vue手动挂载吧;

//假设这这是一段被处理过后得到的代码
const content=`<div>这里是xxx,
			<imgAdmi :fid='${id}' :w='${width}' :h='${height}' :url='${url}' :state='${state}' ></imgAdmi>这里是图文混排
			<imgAdmi :fid='${id}' :w='${width}' :h='${height}' :url='${url}' :state='${state}' >
			<P>DDDDDD</P>
			<videoAdmi  :fid='${id}' :w='${width}' :h='${height}' :url='${url}' ></videoAdmi >
          </div>
`
//假设这是一个楼层的显示容器
<div  v-myh='content'></div>

//假设这是一个指令
Vue.directive("myh", {
    inserted: function (el, binding) {
      // el 代表使用了此指令的 DOM 元素
      // binding 获取使用了此指令的绑定值 
        var vm = new Vue({
         template:binding
	    	....
	    }).$mount(el)
     
       ....
    }
  });
  

忘记说了,前端怎么传递给后台呢。反向操作就可以了。图片id是前端去上传时后台返回的id。

这里只提供简单的思路方案,代码比较粗糙,拒绝伸手党哈。我也就花十几分钟写的帖子,你要全部代码我也没有。。哈哈哈哈哈哈;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SerenityOS 操作系统类 Unix 操作系统

创建于2018年的SerenityOS是一个类似Unix的操作系统&#xff0c;但是带有图形化界面&#xff0c;适合X86台式计算机&#xff0c;&#xff0c;其界面类似90 年代的Win98/NT。几乎由一个人完成额操作系统。这几天其Web浏览器通过了 Acid3 浏览器。 Kernel features 具有抢占式多…

计算机网络笔记、面试八股(四)—— TCP连接

本章目录4. TCP连接4.1 TCP报文段的首部格式4.2 TCP连接如何保证可靠4.3 ARQ协议4.3.1 停止等待ARQ协议4.3.1.1 无差错情况4.3.1.2 出现差错情况4.3.1.3 确认丢失和确认迟到4.3.2 连续ARQ协议4.3.2.1 流水线传输4.3.2.2 累积确认4.3.2.3 滑动窗口协议4.3.3 停止等待ARQ和连续AR…

java面试题-JVM内存结构

整体结构&#xff1a;1.说说JVM内存整体的结构&#xff1f;线程私有还是共享的&#xff1f;JVM&#xff08;Java Virtual Machine&#xff09;内存可以分为以下几个部分&#xff1a;程序计数器&#xff08;Program Counter Register&#xff09;&#xff1a;是线程私有的&#…

JUC并发编程(二)

一、过时方法 一些不推荐使用的方法已经过时&#xff0c;容易破坏同步代码块&#xff0c;使对象的锁得不到释放&#xff0c;进而造成线程死锁 二、守护线程 默认情况下&#xff0c;Java 进程需要等待所有线程都运行结束&#xff0c;才会结束。有一种特殊的线程叫做守护线程…

spring中BeanFactory 和ApplicationContext

在学习spring的高阶内容时&#xff0c;我们有必要先回顾一下spring回顾spring1.什么是springspring是轻量级的&#xff0c;指核心jar包时很小的&#xff1b;非侵入式的一站式框架(数据持久层&#xff0c;web层&#xff0c;核心aop)&#xff0c;为了简化企业级开发。核心是IOC&a…

Python自动化测试实战篇(6)用PO分层模式及思想,优化unittest+ddt+yaml+request登录接口自动化测试

这些是之前的文章&#xff0c;里面有一些基础的知识点在前面由于前面已经有写过&#xff0c;所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇&#xff08;1&#xff09;读取xlsx中账户密码&#xff0c;unittest框架实现通过requests接口post登录网站请求&…

计算及网络第一章

计算机网络-第一章 概述 文章目录计算机网络-第一章 概述计算机网络在信息时代中的作用互联网概述网络的网络互联网的组成网络的边缘部分互联网的核心部分电路交换的主要特点分组交换的主要特点计算机网络的类别几种不同类别的计算机网络计算及网络的性能计算机网络的性能指标计…

面向对象之-接口鉴权

1 需求 1.1 需求背景 为了保证接口调用的安全性&#xff0c;我们希望设计实现一个接口调用鉴权功能&#xff0c;只有经过认证之后的系统才能调用我们的接口&#xff0c;没有认证过的系统调用我们的接口会被拒绝。 2 需求分析 2.1 基础分析 对于如何做鉴权这样一个问题&…

配置 Haproxy 负载均衡群集

配置 haproxy 负载均衡群集 &#x1f3c6;荣誉认证&#xff1a;51CTO博客专家博主、TOP红人、明日之星&#xff1b;阿里云开发者社区专家博主、技术博主、星级博主。 &#x1f4bb;微信公众号&#xff1a;微笑的段嘉许 &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#…

Android 基础知识4-3.3 Button(按钮)与ImageButton(图像按钮)详解

一、引言 今天给大家介绍的Android基本控件中的两个按钮控件&#xff0c;Button普通按钮和ImageButton图像按钮&#xff1b; 其实ImageButton和Button的用法基本类似&#xff0c;至于与图片相关的则和后面ImageView相同&#xff0c;所以本节 只对Button进行讲解&#xff0c;另外…

MySQL进阶之锁

锁是计算机中协调多个进程或线程并发访问资源的一种机制。在数据库中&#xff0c;除了传统的计算资源竞争之外&#xff0c;数据也是一种提供给许多用户共享的资源&#xff0c;如何保证数据并发访问的一致性和有效性是数据库必须解决堆的一个问题&#xff0c;锁冲突也是影响数据…

Neo4j列表函数

使用列表 标量列表函数 size() 函数返回列表中的元素的数量 MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WITH p, collect (m.title) AS MovieTitles WITH p, MovieTitles, size(MovieTitles) AS NumMovies WHERE NumMovies > 20 RETURN p.name AS Actor, NumMovies, Movie…

浙大PTA拼题A读者验证码刷题页面、PTA免费刷题页面(不需要读者验证码)

有一个B站号李桥桉&#xff0c;很多年前讲过PTA里的一些题目的解法。近两年有好多同学反馈&#xff0c;需要读者码才能进行答题&#xff0c;不然只能免费注册、看题、编写代码&#xff0c;就是不能提交代码(大受震撼)。 咱就是说&#xff0c;会不会是同学们找错页面了&#xff…

【数据库】第十二章 数据库管理

第12章 数据库管理 数据库的物理存储 关于内存、外存、磁盘、硬盘、软盘、光盘的区别_Allenzyg的博客-CSDN博客_磁盘和硬盘的区别 数据库记录在磁盘上的存储 定长&#xff0c;变长跨块&#xff0c;非跨快 文件的组织方方法&#xff1a; 无序记录文件(堆文件heap或pile file…

eddsa 算法

信息安全课程设计&#xff1a;eddsa 算法 一、项目要求 使用 C 语言开发&#xff1b;可以实现公私钥生成、签名、认证&#xff1b;只需要手动输入明文&#xff0c;代码会自动生成公私钥、签名、认证&#xff1b;记录公私钥生成、签名、认证的时间&#xff1b;在 VS 上运行&am…

React useCallback如何使其性能最大化?

前言 React中最让人畅谈的就是其带来的灵活性&#xff0c;可以说写起来非常的舒服。但是也就是它的灵活性太强&#xff0c;往往让我们忽略了很多细节的地方&#xff0c;而就是这些细节的东西能进行优化&#xff0c;减小我们的性能开销。可以说刚学React和工作几年后写React的代…

JVM内存结构之堆(重要)

1、概述每个JVM进程有且只有一个堆&#xff0c;进程内的所有线程共享这块区域&#xff0c;堆区在JVM启动的时候即被创建&#xff0c;其空间大小也就确定了&#xff0c;是JVM内存结构中最大的一块区域。由于线程共享&#xff0c;堆也就成了JVM内存管理的核心区域。《Java虚拟机规…

热爱所有热爱

想成为这样的一个人&#xff0c;在工作中是一名充满极客精神的Programmer&#xff0c;处理遇到的问题能够游刃有余&#xff0c;能够做出优雅的设计&#xff0c;写出一手优秀的代码&#xff0c;还有着充分的学习能力和业务能力&#xff0c;做一名职场中的佼佼者。 在工作之余还能…

15、条件概率、全概率公式、贝叶斯公式、马尔科夫链

条件概率定义&#xff1a;设A、B是两个事件&#xff0c;且&#xff0c;P(A) > 0 则称 为事件A发生的条件下事件B的条件概率对这个式子进行变形&#xff0c;即可得到概率的乘法公式&#xff1a;P(A) > 0 时&#xff0c;则P(B) > 0 时&#xff0c;则乍一看&#xff0c;…

数字化转型导师坚鹏:BLM农商行数字化转型实战解决方案及案例

BLM农商行数字化转型实战解决方案及案例研究 ——以BLM模型为核心&#xff0c;践行知行合一思想&#xff0c;实现知行果合一 课程背景&#xff1a; 很多农商行存在以下问题&#xff1a; 不知道如何开展数字化转型工作&#xff1f; 不清楚农商行数字化转型方法论&#xff1f; …