前言

用过很多的富文本,还是蛮喜欢鹅毛富文本,轻量级,
一般遇到富文本的案例,都会首先想到的是quill
目前vue3.0与react分裂两极,typescript霸占一方,javascript还在坚持,vue2.0日薄西山。
本文介绍vue3.0 ts支持的富文本的简单实用和文档地址

富文本Vue-Quill-Editor

官网文档

  • 安装

    yarn add @vueup/vue-quill@beta
    
  • 使用
    import { QuillEditor } from '@vueup/vue-quill'
    import '@vueup/vue-quill/dist/vue-quill.snow.css';
    
    <QuillEditorref="QuillEditorRef":options="options":content="textarea"content-type="html"@update:content="textChange"/>
    
    const options = {debug: 'info',modules: {// toolbar: ['bold', 'italic', 'underline'],},placeholder: '批量输入/粘贴 企业名称或者域名,以“行”为分割线;例如以下:\n北京安全共识科技有限公司\n百度网讯科技有限公司',readOnly: false,theme: 'snow',
    }
    
    const textChange = (e:any) => {textarea.value = econsole.log(e, '98', textarea.value);
    }
    
       // 设置ref:便于调用quill支持的方法// 比如 弹窗打开时设置内容为空const userSecret = async () => {if (QuillEditorRef.value) {QuillEditorRef.value.setText('')}};
    
    注解:
    @update:content 内容改变事件
    options:配置项
    设置ref:便于调用quill支持的方法
    更多详细的请参考文档
    

    效果图

富文本wangeditor

官网文档

  • 效果图

  • 安装

 npm install wangeditor --save-dev
  • 封装
 <template><div><div className="shop"><div className="text-area"><divref="editorElemMenu"style="backgroundColor: '#f1f1f1'; border:'1px solid #ccc'"className="editorElem-menu"/><divref="editorElemBody":className="value&&value!=='<p><br></p>'?'contentClass editorElem-body':'placeholderClass editorElem-body'"style="height: 300;border: '1px solid #ccc',borderTop: 'none'"/></div></div></div></template><script lang="ts" setup>import {onMounted, reactive, toRefs, defineComponent, ref,} from 'vue'import E from 'wangeditor'interface DataProps {editor: any;editorContent: stringgetContent:(ref?: any) => void}const props = defineProps({options: {type: Object,default: () => ({}),},value: {type: String,default: '',},});const editorElemMenu = ref();const editorElemBody = ref();const data: DataProps = reactive({editorContent: '',editor: {},getContent: () => {data.editor.txt.html(props.value)},})const emit = defineEmits(['onEditor', 'update:value']);onMounted(() => {const elemMenu = editorElemMenu.value;const elemBody = editorElemBody.value;data.editor = new E(elemMenu, elemBody)// 使用 onchange 函数监听内容的变化,并实时更新到 state 中data.editor.config.placeholder = '批量输入/粘贴 企业名称或者域名,以“行”为分割线;例如以下:<br/>北京安全共识科技有限公司<br/>百度网讯科技有限公司<br/>百度移信网络技术(北京)有限公司<br/>百度时代网络技术(北京)有限公司<br/>中电国佳(北京)投资基金管理有限公司<br/>北京安全共识科技有限公司<br/>百度网讯科技有限公司<br/>百度移信网络技术(北京)有限公司<br/>百度时代网络技术(北京)有限公司<br/>中电国佳(北京)投资基金管理有限公司',data.editor.config.onchange = () => {console.log(data.editor.txt.html())data.editorContent = data.editor.txt.html()// 向外部返回一个处理过的值emit('onEditor', data.editor.txt.html())emit('update:value', data.editor.txt.html())}data.editor.config.customUploadImg = function (files: any, insert: any) {// files 是 input 中选中的文件列表insert 是获取图片 url 后,插入到编辑器的方法// let file;// if (files && files.length) {//     file = files[0];// } else {//     return// }// 图片上传console.log('files1', files)const formData = new FormData();formData.append('file', files[0]);console.log('files', files, insert)// formData.append('Banners',{id:editorinfo.id,naviChildId:editorinfo.naviChildId})}data.editor.config.menus = ['head', // 标题'bold', // 粗体'fontSize', // 字号'fontName', // 字体'italic', // 斜体'underline', // 下划线'strikeThrough', // 删除线'foreColor', // 文字颜色'backColor', // 背景颜色'link', // 插入链接'list', // 列表'justify', // 对齐方式'quote', // 引用'emoticon', // 表情'image', // 插入图片'table', // 表格'video', // 插入视频'code', // 插入代码'undo', // 撤销'redo', // 重复]data.editor.config.uploadImgShowBase64 = truedata.editor.create()// data.getContent()})const refData = toRefs(data);</script><style scoped lang="scss">:deep(.w-e-text-container){min-height: 349px;max-height: 449px;overflow-y: auto;line-height: 32px;&:focus{outline: 0;box-shadow: 0 0 0 1px rgba(0, 88, 240, 1) inset;}&:active{outline: 0;box-shadow: 0 0 0 1px rgba(0, 88, 240, 1) inset;}&:visited{outline: 0;box-shadow: 0 0 0 1px rgba(0, 88, 240, 1) inset;}&::-webkit-scrollbar {/*滚动条整体样式*/width:0px;/*高宽分别对应横竖滚动条的尺寸*/}.placeholder{line-height: 32px;left: 16px;top: 16px;width: calc(100% - 16px);}.w-e-text{max-height: 449px;line-height: 32px;padding: 16px 16px;&::-webkit-scrollbar {/*滚动条整体样式*/width:0px;/*高宽分别对应横竖滚动条的尺寸*/}p{line-height: 32px;margin: 0px;}}}.placeholderClass{:deep(.w-e-text-container){background: #F2F3F5;border-radius: 2px;color: #D1D5DD;&:hover{outline: 0;box-shadow: none;// box-shadow: 0 0 0 1px #F2F3F5 inset;}&:focus{outline: 0;box-shadow: 0 0 0 1px rgba(0, 88, 240, 1) inset;}}}.contentClass{:deep(.w-e-text-container){background: #fff;border-radius: 2px;color: #171B23;box-shadow: 0 0 0 1px rgba(0, 88, 240, 1) inset;&:hover{outline: 0;box-shadow: none;box-shadow: 0 0 0 1px rgba(0, 88, 240, 1) inset;}&:focus{outline: 0;box-shadow: 0 0 0 1px rgba(0, 88, 240, 1) inset;}}}</style>
  • 使用
  <Editorref="refEditor":value="textarea"@onEditor="onEditor"/>// 导入     import Editor from './Editor/wangEditor.vue'const textarea = ref<any>('')const refEditor = ref<any>();const onEditor = (value:any) => {console.log('父组件', value)textarea.value = value}

富文本数据处理

// 针对纯文本 提取里面的文字 push到data中
// <p>123</p>
let data = []
if(val !== undefined){// 段落文本val.replace(/<p>(([\s\S])*?)<\/p>/g, (match, capture) => {data.push( capture );});// 图片val.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/g, (match, capture) => {data.push({files_url:capture,});});
}
多个标签,复杂的属性
// 匹配标签(不包括内容),过滤标签,保留内容。
var reg1 = /(<\/?font.*?>)/gi;
var reg2 = /(<\/?span.*?>)/gi;
var reg3 = /(<\/?a.*?>)/gi;
var reg4= /(<\/?font.*?>)|(<\/?span.*?>)|(<\/?a.*?>)/gi;var str = '<span>span数据</span><a href="asdasd">a数据<font>font数据</font></a>';
console.log(str.replace(reg1, ''));
console.log(str.replace(reg2, ''));
console.log(str.replace(reg3, ''));
console.log(str.replace(reg4, ''));// 只去掉标签内的属性(比如style和class)
var reg1 = /<span[^>]*>/gi;
var str1 = '<span style="color:red;">去除样式属性</span>123123';
console.log(str1.replace(reg1, '<span>'));

支持vue3.0+ts 的富文本记录相关推荐

  1. 如何搭建一个完整的Vue3.0 + ts 的项目

    如何搭建一个完整的Vue3.0 + ts 的项目 相信9月18日尤大大的关于Vue3.0的发表演讲大家一定有所关注,现在Vue3.0 也已经进入RC阶段(最终产品的候选版本,如果没有问题则可发布成为正 ...

  2. vue3.0+ts+element-plus多页签应用模板:element-plus按需引入与动态换肤

    目录 系列链接 一.安装element-plus 二.按需引入 1. 为什么要按需引入? 2. 如何按需引入? 3. 验证是否引入成功 三.动态换肤 1. 制作自定义主题 2. 引入自定义主题 3. ...

  3. vue3.0+ts+element-plus多页签应用模板:多级路由缓存

    目录 系列文章 一.先说点啥 1. 为啥需要路由缓存? 2. 怎么实现路由缓存? 二.路由扁平化 三.定义tag模块处理路由缓存 四.切换路由时加入缓存 五.使用keep-alive 系列文章 vue ...

  4. Vue3.0+TS+Element-plus实现(若依版后台管理系统)

    附上源码地址: Vue3.0+TS+Element-plus 后台管理系统模板 准备工作 安装vue3.0,npm create vue3-project 选中这几项即可,不需要vuex, 我们自己封 ...

  5. vue 不识别svg_vue中引用svg,vue引入svg不显示,vue引用svg配置,vue3.0+ts如何配置svg...

    注意: 如果按照下面配置正确发现svg依然无法显示可能s'v'g-sprite-loader的版本过高,重新指定版本下载npm i svg-sprite-loader@3.8.0 --save-dev ...

  6. vue3.0+ts+element-plus多页签应用模板:项目搭建

    目录 系列文章 一.安装vue-cli@4.5.x 二.创建项目 三.项目配置 四.IDE配置 五.vue.config.js配置 六.重置浏览器默认样式 系列文章 vue3.0+ts+element ...

  7. vue3.0+ts+element-plus多页签应用模板:侧边导航菜单(上)

    目录 系列文章 一.先说点什么 二.从问题开始,侧边栏是干啥的? 三.封装组件之思路分析 四.封装菜单部分 1. MenuItem 2. ModuleMenu 系列文章 vue3.0+ts+eleme ...

  8. 文档管理工具(支持http、websocket、富文本、markdown)

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 文档管理工具(支持http.websocket.富文本.markdown) 二.实现功能 支持markdown语法 支持JSON测试 支持TXT测试 ...

  9. vue3.0 + ts H5拍照组件

    vue3.0 + ts H5拍照组件 实现了简单的拍照功能,拍照成功返回文件对象.(待更新,裁剪,缩放,旋转) 效果图 使用 通过npm下载 npm i wl-easy-ui 或者通过yarn add ...

最新文章

  1. 马云打响本地生活消费攻坚战,饿了么获手淘一级入口,美团危险了
  2. asp 把大图缩小显示的JS
  3. 企业级日志收集系统——ELKstack
  4. Python 堡垒机介绍
  5. linux pstree乱码,pstree下显示乱码解决
  6. 因为犯罪被判三年刑,期间没办法还信用卡,银行会怎么做?
  7. Diango博客--6.Markdown 文章自动生成目录
  8. TurboMail打造雀氏(中国)日用品邮件系统
  9. clientHeight、offsetHeight、scrollHeight问题
  10. A股开盘:深证区块链50指数涨0.18%,概念股涨多跌少
  11. kafka安装完整步骤_还在寻找Kafka最新的安装教程吗?精细的安装步骤分享给大家...
  12. 数据库接口实验--php实现--
  13. ppt生成eps文件_eps是什么格式怎么打开?全面解析图片的eps是什么格式
  14. 【FPGA+PWM】基于FPGA的三相PWM整流器移相触发电路的设计与实现
  15. 校园多媒体直播系统方案
  16. cxk不会二进制 (贪心)
  17. 机器学习实例----美国人口收入分析
  18. dax和m的区别_DAX:一文透彻理解DAX本质
  19. Zookeeper简介,架构,单机版搭建
  20. Dacom G150双模耳机,为爱发声,呵护孩子听力健康成长

热门文章

  1. 高速固态存储卡学习资料第701篇:基于6U VPX XC7V690T的阵列M.2高速固态存储卡
  2. Ubuntu18.04+RTX3060显卡配置pytorch、cuda、cudnn和miniconda
  3. 连云存储魔力象限都进不了,就别提三年之内中国第一了吧!
  4. 科普之Linux应用程序与内核程序交互的几种方式。
  5. 工厂车间安灯(Andon)系统
  6. java购书管理系统代码_Java Web 网上书店管理系统
  7. Linux下如何查看CPU信息, 包括位数和多核信息
  8. 查看每个cpu核使用情况
  9. 思维导图---SQL Queries for Mere Mortals (5 - 6章)
  10. Intel网卡安装和使用