解决ueditor表格拖拽没反应的问题
背景
ueditor作为百度推出的富文本编辑框,以功能强大著称。
笔者最近用这个编辑框做了一个自定义打印格式的功能。允许用户在富文本编辑框中设定打印格式,再实际打印时,根据关键字替换数据库中信息,然后调用富文本的打印功能进行打印。
笔者是集成在vue中使用的,用的版本为"vue-ueditor-wrap": "^2.5.6"
但是在设置打印格式的时候,笔者及客户都发现该文本编辑框,推动表格时不宜拖动,除第一次拖动外,之后每次拖动,表格的宽度根本不动。且表格的行高太高,与文字之前有很大间距。
解决表格宽度不易拖动的问题
为了解决该问题,笔者对ueditor的源码ueditor.all.js进行了研究。
分析过程
发现在表格边框拖动的方法tableBorderDrag中,有以下几行代码,并经过代码分析及跟踪。各代码作用注释如下
//边框拖动
function tableBorderDrag( evt ) {
//隐藏拖动标识线
hideDragLine(me);
//显示拖动标识线
getDragLine(me, me.document);
me.fireEvent('saveScene');
//设置拖动标识线的位置
showDragLineAt(state, startTd);
//设置鼠标按下的标识
mousedown = true;
//拖动开始
onDrag = state;
//拖动时选中的单元格
dragTd = startTd;
}
从代码可知,每次鼠标按下时,都是先隐藏标示线(remove),之后再显示标识线(add)。从逻辑来说没问题,但注意,其中加了一行代码me.fireEvent('saveScene') 该代码触发了编辑框的自动保存事件。
又经过代码分析,发现最终触发了编辑框的contentchange事件。
contentchange事件的代码如下。
//内容变化时触发索引更新
//todo 可否考虑标记检测,如果不涉及表格的变化就不进行索引重建和更新
me.addListener("contentchange", function () {
var me = this;
//尽可能排除一些不需要更新的状况
hideDragLine(me);
if (getUETableBySelected(me))return;
var rng = me.selection.getRange();
可以看到,该事件,同样调用了hideDragLine方法,由此可知,拉宽表格时,表格拖动标识线经过了 先删除、在新增、再删除的过程。所以我们的拖动不起作用。
解决方法
好了,那么我们只需要把tableBorderDrag函数中的me.fireEvent('saveScene');这一个句代码隐藏掉即可。
经测试,表格已经可以完美拖动了。
表格的行与文字之前有很大间距问题
表格行列的自由拖动解决了,那么还剩下表格的行与文字之间的间距。
分析过程
经过浏览器的开发者工具定位,很容易发现存在一个样式
td, th {
padding: 5px 10px;
border: 1px solid #DDD;
}
把padding属性勾选掉之后,我们表格线与文字立马贴合了。
那么我们的任务就是把这个padding属性添加的地方改掉即可。
在ueditor.all.js搜索后,很容易定位到添加CSS的代码

解决方法
我们把这个行代码改掉,把padding设置为0或者1即可。
最终效果如图:

注意:需要同步修改ueditor.parse.js中的对应的样式位置,用于打印预览与编辑框中展示的一致。
结语
至此,已经完美满足我们用这个富文本编辑器作为打印格式使用的初衷。相比于使用成熟的打印格式配置插件,在打印需求不复杂的情况下,使用富文本编辑框做打印格式模版设置,也是一个快速开发的选择。
注意
上述替换如果使用的是ueditor.all.min.js文件,还需要同步替换该文件对应的代码。
解决ueditor表格拖拽没反应的问题的更多相关文章
- react拖拽(表格拖拽排序、普通拖拽排序以及树形拖拽排序)
表格拖拽排序:组件地址:https://reactabular.js.org/#/drag-and-drop 拖动的排序是用React-DnD:React-DnD:http://react-dnd.g ...
- js 实现table表格拖拽和点击表头升降序排序
js 实现table表格拖拽和点击表头升降序排序,写的比较乱,用的时候可以把其中的一些模块函数提取出来 样式,由于是可拖拽表格,所以样式 table tr th{cursor:move;} js实现 ...
- 实现Bootstrap表格拖拽
实现Bootstrap表格拖拽: 需要引入jquery.min.js.bootstrap相关文件,以及jquery.dragsort-0.5.2.js 代码如下: <html> <h ...
- IE8利用setCapture和releaseCapture解决iframe的拖拽事件
最近有个需求须要实现左右拖拽功能,页面右边是个iframe页面,在chrome测试通过之后,发现在ie8上面效果不是很理想,最后查找资料得知可以使用ie自带的setCapture和releaseCap ...
- 根据HTML5的新方法 drag & drop 方法实现表格拖拽实例
上一次学习了html5的drag和drop方法,传送门 就自己写了个例子加深自己对drag和drop的理解.不过一开始不是很简单,遇到了不少问题.还好网络万能的,什么都能查到,总算完成了. 说明和详 ...
- js表格拖拽
html部分 <div id="chenkbox"> <div id="tableSort"> <ol> <li> ...
- 基于Vue实现可以拖拽的树形表格(原创)
因业务需求,需要一个树形表格,并且支持拖拽排序,任意未知插入,github搜了下,真不到合适的,大部分树形表格都没有拖拽功能,所以决定自己实现一个.这里分享一下实现过程,项目源代码请看github,插 ...
- VUE 元素拖拽、移动
元素拖拽 作者:一粒尘土 时间:2019-10-30 使用范围:两个元素位置交换,移动元素到指定位置 涉及函数 属性 解释 draggable 是否允许元素进行拖拽 dragstart 拖拽开始触发的 ...
- 拖拽对DOM的影响
前一段时间公司要对上传列表中多文本输入框添加富文本编辑功能,所以最初的想法是引入富文本编辑器插件,对每个多文本输入框实例化一次.但是上传列表还有一个可以拖拽排序的功能,在初次实例化以后,再拖拽元素就会 ...
- JS错误记录 - 事件 - 拖拽
错误总结: 1. var disX = 0; 现在window.onload里声明变量,而不是在事件oDiv.onmousedown里面声明并赋值. 对于这个还不是很明白. 2. onmoused ...
随机推荐
- ESXI不重启增加硬盘空间更新
ESXI虚拟机Linux添加新磁盘后,可以通过重新扫描SCSI总线,在不重启虚拟机的情况下添加SCSI设备在线扩容磁盘(不停机)后,添加磁盘无法识别的问题,尝试了多种办法,最终通过重新扫描SCSI设备 ...
- 在 Rime 上对输入法进行定制
Rime Rime是什么?忘了!但是在用.而且很好用. 了解Rime历史,还是去官网吧! 定制 Rime有两个目录: 1. 程序目录 2. 用户目录 Rime 的程序目录 Windows 上 要看你安 ...
- nginx启动命令
启动加载配置文件 [root@172 sbin]#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 检查配置信息是否正确 ...
- vue npm安装指令汇总
1.elmentui:npm i element-ui -S 2.打印插件:npm install vue-print-nb --save 3.时间转换插件Moment:npm install mom ...
- miou
1. 前言 本文学习记录了机器学习中的分类常见评价指标以及分割中的MIoU. 主要有以下概念:Accuracy, Precision, Recall, Fscore,混淆矩阵,IoU及MIoU. 2. ...
- Monterey 12.3 I225-V有线网卡导致死机或无法使用问题
问题:升级Monterey12.3后启动到桌面死机 解决方法: 1.关闭/去掉所有有线网卡驱动.补丁.网卡设备ID注入: 2.启动命令中加入:dk.e1000=0: 3.启动不死机后,进入网络设置,手 ...
- java接口自动化需要的技术
1.testNG需要了解的知识 ITestContext这个类可以直接在方法参数里使用,主要作用是可以通过它的context.getSuite()直接获取suite的相关信息.还可以通过它的 cont ...
- C++语法难点
virtual 实现类的多态性:基类定义虚函数,子类可以重写该函数:如果使用了virtual关键字,程序将根据引用或指针指向的 对象类型 来选择方法,否则使用引用类型或指针类型来选择方法 实现虚继承, ...
- vmware网络故障处理
1.基本情况,更新vmware后发现联不上ssh了.查看物理机和虚拟机的ip,使用ping命令发现 虚拟机可以ping物理机且有网络 但是物理机是无法ping虚拟机的 2.网络的教程整理了,各有问题, ...
- Python - XSS-Attribute
参考资料:https://owasp-skf.gitbook.io/asvs-write-ups/cross-site-scripting-attribute-xss-attribute/kbid-3 ...