wangeditor 表格问题总结及适配方案

一、导出编辑器内容,表格无边框样式 

1、通过 let article = this.editor.getHtml();  // editor.getHtml() 获取 HTML 内容;

2、处理文本字符串:(手动为 table 加上 css样式);

article = article.replace(/<table style="/g,'<table style="border-collapse:collapse;');  // 去除单元格边框间距article = article.replace(/<table /g,'<table border="1" ');  // 添加边框

3、再将最终处理好的 article 上传到服务器;

二、禁止新增、删除行/列

1、导入的表格默认有 插入、删除列/行等功能,如果不想使用的话,我们通过css样式将它隐藏

 在不想展示的元素上方右键 — 检查 — 找到该元素的唯一属性:如 “插入” 为 data-menu-key="insertTableRow" ,为该 button 设置 display:none;属性,即可隐藏;

// 隐藏图片"编辑"、表格“新增、删除行列”按钮button[data-menu-key="editImage"], button[data-menu-key="tableFullWidth"],button[data-menu-key="insertTableRow"],button[data-menu-key="deleteTableRow"],button[data-menu-key="insertTableCol"],button[data-menu-key="deleteTableCol"],button[data-menu-key="tableHeader"]{display: none;}

 三、输入内容较长撑开列表,导致超屏问题

1、设计编辑器的样式:得设置 max-width 才有效(具体原因不清楚,欢迎大佬指导),内容超出换行 word-break:break-word;

td{max-width: 50px !important;word-break: break-word;
}

2、导出的编辑器内容处理:

        根据表格列数,设置每个 td 的最大宽度为(100 / 列数)%,即平均分配;

let article = this.editor.getHtml();
article = this.tableBorderDel(article);// 处理表格内容超屏tableBorderDel(str){      let tableReg = /<table.*?<\/table>/g;  // 匹配<table></table>对let styleReg = /width=".*?"/g;   // 匹配所有的width,设为autolet trReg = /<tr.*?<\/tr>/;   // 匹配trlet tdReg = /<td.*?<\/td>/g;   // 匹配所有tdlet tableList = str.match(tableReg);if ( tableList != null ) {tableList.map(tableItem =>{let newTable = tableItem.replace(styleReg, 'width="auto"');str = str.replace(tableItem, newTable);})// 计算出最大宽度(根据列数,平均分配)let firstTr = tableList[0].match(trReg)[0];let tdNum = firstTr.match(tdReg).length;str = str.replace(/<td /g,`<td style="max-width:${100 / tdNum}% !important;word-break:break-word; "`);  // td 最大宽度、超出换行}return str;},

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

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

相关文章

stm32标准库开发常用函数的使用和代码说明

文章目录 GPIO&#xff08;General Purpose Input/Output&#xff09;NVIC&#xff08;Nested Vectored Interrupt Controller&#xff09;DMA&#xff08;Direct Memory Access&#xff09;USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xf…

虎年现货黄金投资布局图

参与现货黄金交易的主要目的&#xff0c;是为了根据行情走势的变动&#xff0c;把握一些较佳的获利机会&#xff0c;在这样的一个过程中&#xff0c;如果投资者能够提前把布局的图表画好&#xff0c;那么就可能获得事半功倍的效果&#xff0c;而本文将为大家简单的介绍&#xf…

【主成分分析(PCA)- 鸢尾花】

主成分分析&#xff08;PCA&#xff09; 摘要 在现代数据科学中&#xff0c;维度灾难常常是数据处理与分析的一大难题。主成分分析&#xff08;PCA&#xff09;是一种广泛使用的数据降维技术&#xff0c;它通过将原始数据转换为新的低维空间&#xff0c;保留最重要的信息&…

15.Netty源码之EventLoop

highlight: arduino-light Netty配置主从Reactor模式 通过将NioServerSocketChannel绑定到了bossGroup。 将NioServerSocketChannel接收到请求创建的SocketChannel放入workerGroup。 将2个不同的SocketChannel绑定到2个不同的Group完成了主从 Reactor 模式。 分配NIOEventLoop的…

linux | zlib下载、安装

linux | zlib下载、安装 1. 下载 http://www.zlib.net/zlib-1.2.13.tar.gz 2.编译、安装 [fly752fac4b02e9 eeasy]$ tar zxf zlib-1.2.13.tar.gz [fly752fac4b02e9 eeasy]$ ls cramfs-1.1.tar.gz scons-3.0.1 scons-3.0.1.tar.gz smart-car zlib-1.2.13 zlib-1.2.13.tar…

行为型-备忘录模式(Memento Pattern)

说明 备忘录模式是一种行为型设计模式&#xff0c;通过捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便在需要时恢复对象到原先的状态。备忘录模式包含三个核心角色&#xff1a;。 发起人&#xff08;Originator&#xff09;&#xff1a;负责…

论文精读之BERT

目录 1.摘要&#xff08;Abstract&#xff09; 2.引言&#xff08;Introduction&#xff09;&#xff1a; 3.结论&#xff08;Conlusion&#xff09;&#xff1a; 4.BERT模型算法: 5.总结 1.摘要&#xff08;Abstract&#xff09; 与别的文章的区别是什么:BERT是用来设计去…

springboot创建并配置环境(三) - 配置扩展属性(上集)

文章目录 一、介绍二、配置文件application.yml 一、介绍 在上一篇文章&#xff1a;springboot创建并配置环境(二) - 配置基础环境中&#xff0c;我们介绍了springboot如何配置基础环境变量。本篇文章讨论如何处理配置文件。即来自不同位置的配置属性&#xff0c;如&#xff1…

【Chat GPT】用 ChatGPT 运行 Python

前言 ChatGPT 是一个基于 GPT-2 模型的人工智能聊天机器人&#xff0c;它可以进行智能对话&#xff0c;同时还支持 Python 编程语言的运行&#xff0c;可以通过 API 接口进行调用。本文将介绍如何使用 ChatGPT 运行 Python 代码&#xff0c;并提供一个实际代码案例。 ChatGPT …

简单理解大模型参数高效微调中的LoRA(Low-Rank Adaptation)

[论文地址] [代码] [ICLR 22] 阅前须知&#xff1a;本博文可能有描述不准确/过度简化/出错的地方&#xff0c;仅供参考。 网络结构 其中&#xff0c;原有模型的参数是直接冻结的&#xff0c;可训练参数只有额外引入的LoRA参数(由nn.Parameter实现)。 模型微调的本质 记网络原…

LabVIEW实现三相异步电机磁通模型

LabVIEW实现三相异步电机磁通模型 三相异步电动机由于经济和出色的机电坚固性而广泛用于工业化应用。这台机器的设计和驱动非常简单&#xff0c;但在控制扭矩和速度方面&#xff0c;它隐藏了相当大的功能复杂性。通过数学建模&#xff0c;可以理解机器动力学。 基于微分方程的…

【嵌入式学习笔记】嵌入式基础9——STM32启动过程

1.MAP文件浅析 1.1.MDK编译后生成的中间过程文件 1.2.Map文件构成&#xff1a; 程序段交叉引用关系&#xff08;Section Cross References&#xff09;&#xff1a;描述各文件之间函数调用关系删除映像未使用的程序段&#xff08;Removing Unused input sections from the im…

Netty学习(二)

文章目录 二. Netty 入门1. 概述1.1 Netty 是什么&#xff1f;1.2 Netty 的作者1.3 Netty 的地位1.4 Netty 的优势 2. Hello World2.1 目标加入依赖 2.2 服务器端2.3 客户端2.4 流程梳理课堂示例服务端客户端 分析提示&#xff08;重要&#xff09; 3. 组件3.1 EventLoop事件循…

【图像处理】使用 OpenCV 将您的照片变成卡通

图像到卡通 一、说明 在当今世界&#xff0c;我们被图像和视频所包围。从社交媒体到广告&#xff0c;图像已成为一种强大的交流媒介。但是你有没有想过&#xff0c;如果你能把你的照片变成卡通会发生什么&#xff1f;想象一下&#xff0c;为您最喜欢的照片创建动画版本&#xf…

express 路由匹配和数据获取

express配置路由只需要通过app.method(url,func)来配置&#xff0c;其中url配置和其中的参数获取方法不同 直接写全路径 路由中允许存在. get请求传入的参数 router.get("/home", (req, res) > {res.status(200).send(req.query); });通过/home?a1会收到对象…

Spark的DataFrame和Schema详解和实战案例Demo

1、概念介绍 Spark是一个分布式计算框架&#xff0c;用于处理大规模数据处理任务。在Spark中&#xff0c;DataFrame是一种分布式的数据集合&#xff0c;类似于关系型数据库中的表格。DataFrame提供了一种更高级别的抽象&#xff0c;允许用户以声明式的方式处理数据&#xff0c…

MyBatis-Plus

1.入门案例 1.1 pom依赖引用 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version> </dependency><dependency><groupId>mysql</grou…

Pytorch深度学习-----神经网络的基本骨架-nn.Module的使用

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

python爬虫基础入门——利用requests和BeautifulSoup

(本文是自己学习爬虫的一点笔记和感悟) 经过python的初步学习,对字符串、列表、字典、元祖、条件语句、循环语句……等概念应该已经有了整体印象,终于可以着手做一些小练习来巩固知识点,写爬虫练习再适合不过。 1. 网页基础 爬虫的本质就是从网页中获取所需的信息,对网…

ClickHouse使用场景和案列分析

目录 一、ClickHouse 概述1. ClickHouse简介2. ClickHouse 发展历程3. ClickHouse 特点 二、ClickHouse 架构1. 数据存储层&#xff1a;2. SQL 解析层&#xff1a;3. 查询执行层&#xff1a;4. 数据压缩层&#xff1a; 三、ClickHouse 性能优化1. 查询优化&#xff1a;2. 数据压…