首页 > 编程语言 >关于解决UEditor源码模式下提交保存样式 样式是乱的

关于解决UEditor源码模式下提交保存样式 样式是乱的

时间:2023-03-03 10:34:45浏览次数:59  
标签:UEditor htmlString return 样式 element 源码 const 类名

 

         

 

 

 

问题1 这个项目的UEditor是用来编辑页面的  每个页面又有不同的模块  然而业务部门有时候是会直接从别的模块直接复制源代码然后在可视模式下直接修改以下a链接啥的 然后问题来了

因为是复制过来的 然后会导致 类名重复 导致样式错乱的问题

 

问题2 直接点击提交的话会产生很多莫名其妙的空格  例如以下这种 

 

 

 

 

 

然后发现导致这种的问题原因是在源码模式下提交的字符串是没经过压缩处理的 然后这些空白的地方会替换成空格 

先说 问题1 的处理方法 

直接在类名后面添加随机字符串 然后可以避免类名重复问题  为了避免多次复制造成类名过长 如果已经是添加过的 删除了重新添加

我们用的是Vue 在返回富文本内容之前先处理一次

 

 

 先是获取style标签里面的类

            getStyleClass (htmlString) {
                const classList = htmlString.match(/[^.]+(?={)/g) || [] //用正则获取类名
                let value = classList.map((item) => {
                    const index = item.indexOf(':')
                    if (index !== -1) return item.substring(0, index) //如果类名有伪类 去掉伪类
                    return item.trim()
                })
                return [...new Set(value)] // 去重 返回
            },

然后修改富文本中的类名

 setElementClass (htmlString, classList) {
                if (!classList.length) return htmlString
                classList.forEach(element => {
                    if (htmlString.includes(element)) {
                        // 匹配<style>里面的类
                        const styleRegex = new RegExp('\\.' + element.replace(/[:.]/g, '\\$&') + '(\\W)', 'g')
                        // 匹配 class里面的类名
                        const classRegex = new RegExp(`class="([^"]*)${element}([^"]*)"`, 'g')
                        const str = this.randomString(4)//随机字符串函数 
                         // 如果是类名已经经过一次处理的 删除_xxxx 重新生成 避免类名过长
                        if (element.indexOf('_') !== -1) element = element.substring(0, element.indexOf('_'))
                        htmlString = htmlString.replaceAll(classRegex, `class="$1${element}_${str}$2"`).replaceAll(styleRegex, `.${element}_${str}$1`)
                    }
                })
                return htmlString
            },

  然后就解决了

然后 问题2 其实也简单 setElementClass返回值之前 先用正则处理一下空格再返回  主要是去UEditor源码找这段正则找的我头疼  

 

htmlString = htmlString.replace(new RegExp('[\\r\\t\\n ]*</?(\\w+)\\s*(?:[^>]*)>', 'g'), function (a, b) {
    return a.replace(/(^[\n\r\t ]*)|([\n\r\t ]*$)/g, '')
})

 

 

 

 然后问题基本解决了  其实UEditor问题真挺多的

突然想起来之前还遇到过的一个问题 也是源代码复制过来的 然后在可视区修改 比如修改a链接啥的 因为修改的时候会重新生成一个a链接 会把旧的a链接覆盖

解决方法 Link文件 的link.html 获取旧的class  并且在下面的 handleDialogOk 继承旧的属性

 

 

 

 

标签:UEditor,htmlString,return,样式,element,源码,const,类名
From: https://www.cnblogs.com/xiduoshi/p/17174509.html

相关文章

  • 彩虹个人发卡网源码+免签易支付源码接口+搭建教程
    在全球大流行的时代,一个平稳运行的支付网关发卡系统是经营具有大量在线业务的企业的关键。如果您已经在使用像BigCommerce这样的电子商务软件,那么您几乎不需要任何编码技能......
  • 【Mybatis】【事务管理器】【一】Mybatis源码解析-事务管理器
    1 前言在了解数据源后,我们来看下事务管理器,这个东西也很重要。2  事务管理器类型在MyBatis中有两种类型的事务管理器(也就是type="[JDBC|MANAGED]"):JDBC–这个......
  • gpgpu-sim 源码学习笔记
    gpgpu-sim源码学习笔记sourcecode1.docuserguidemainpageisca2012tutorialmicro2012-tutorialfunction提供cycles精确的GPGPU仿真模型支持PTX功能模拟......
  • 视频直播源码,js实现节流和防抖
    视频直播源码,js实现节流和防抖防抖:就是指连续触发事件但是在设定的一段时间内中只执行最后后一次,例如:设定1000毫秒执行,当你触发事件了,他会1000毫秒后执行,但是在还剩500毫......
  • 直播系统源码,云朵左右移动循环动画实现
    直播系统源码,云朵左右移动循环动画实现组件 <imageclass="yun3aniYunImg":animation="animationYunData":src="yun1"></image>​JS data(){return{   ......
  • django 源码解读 python manage.py makemigrations
    分析命令之前,需要先了解makemigrations调用的一些类。这样对于后面分析命令时很轻松。1.MigrationRecorder类这个类在django/db/migrations/recorder.py文件中,这个类是......
  • 【Mybatis】【数据源】【一】Mybatis源码解析-内置数据源
    1 前言这节我们要看一下数据源的东西了。比如我们以前在XML配置的什么驱动、url、账号密码啥的以及现在我们在SpringBoot下配置的其实都是为了创建我们的数据源,那么这节......
  • java HashMap 源码
    jdk1.7和1.8区别比较大,主要是数据结构上的区别从而put()get()等方法也会有相应变化jdk1.7数据结构为数组(buckets)+单向链表(entries)hash冲突时......
  • java LinkedList 源码
    概述底层数据结构是双向链表(jdk1.6是双向循环,1.7开始不循环了),所以新增/删除效率高,查询/修改效率相对较低全能冠军:既是一个顺序容器,也是队列,还可以作为栈使用未实现Ran......
  • 事件分发源码分析
    1.Activity对事件的分发过程publicbooleandispatchTouchEvent(MotionEventev){if(ev.getAction()==MotionEvent.ACTION_DOWN){onUserInte......