当前位置: 首页 > article >正文

wangEditor/editor自定义粘贴后续

背景

按照上一篇文章处理自定义粘贴之后,发现复制表格之后,会出现表格样式失效问题,原因是自定义粘贴没有处理表格数据,导致按照文本格式粘贴了

处理方式

  • 自定义表格(如果业务有需求需要更新表格样式的,那就要研究一下wangEditor/editor的table-module的部分源码熟悉node的数据结构)非必要不需要这样
  • 自定义粘贴中,忽略含有表格数据的粘贴(本文采用方式)

代码如下

utils/index.js

/**
 * 自定义粘贴
 * @description 富文本自定义粘贴
 * @returns {boolean} 是否不阻止默认粘贴行为
 */
export function customPasteItemFunc(editor, event) {
  try {
    /** 粘贴事件 */
    const clipboardData = event.clipboardData;
    const html = clipboardData.getData("text/html");
    /** 正则匹配table标签 */
    const res = html.match(/<table[^>]+>/g);
    if (res) {
      return true;
    }
    if (clipboardData && clipboardData.items) {
      for (let i = 0; i < clipboardData.items.length; i++) {
        const item = clipboardData.items[i];
        // 如果是由图片文件
        if (item.type.indexOf("image") !== -1) {
          customUploadImage.call(this, item, editor);
          return false;
        }
        // 如果是由视频文件
        else if (item.type.indexOf("video") !== -1) {
          customUploadVideo.call(this, item, editor);
          return false;
        } else if (item.type.indexOf("text/html") !== -1 && !res) {
          customPasteTextMain.call(this, clipboardData, editor);
          return false;
        }
      }
    }
    return false;
  } catch (e) {
    this.$Message.error(e.message);
  }
}

edit.vue

<template>
	<Editor
      ...
      @customPaste="handleCustomPaste"
    />
</template>
methods: {
 handleCustomPaste(editor, event) {
      const isStop = customPasteItemFunc.call(this, editor, event);
      // 阻止默认的粘贴行为
      if (!isStop) event.preventDefault();
      return isStop;
    }
}

核心思路

是否阻止粘贴事件的默认行为
wangeditor/editor中针对在自定义粘贴事件中阻止默认粘贴行为,需要使用如下代码

function customPaste(editor, event) {
	/** 相关业务处理 */
	...
	// 阻止默认行为
	event.preventDefault();
	return false;
}

总结

书接上文,大家只看这篇的可以翻看上一节,如果有帮助到大家,记得帮博主点个赞!!!


http://www.kler.cn/a/459356.html

相关文章:

  • 【微信小程序获取用户手机号
  • JavaScript系列(4)--数值类型专题
  • 直播预告丨社区年度交流会 《RTE 和 AI 融合生态洞察报告 2024》发布
  • Ansys Aqwa 中 Diffraction Analysis 的疲劳结果
  • websocket-sharp:.NET平台上的WebSocket客户端与服务器开源库
  • 【GO基础学习】gin的使用
  • Flink窗口window详解(分类、生命周期、窗口分配器、窗口函数、触发器)
  • Flume的概念和原理
  • 【大语言模型】DeepSeek与Kimi对论文内容理解的简单对比
  • 北京人形机器人产业发展与CES Asia 2025的科技展望
  • gozero项目接入elk的配置与实战
  • 如何绘制星巴克门店热力地图
  • 胡闹厨房练习(三)
  • UE5材质节点SimpleGrassWind
  • 《艺术的启示》最新答案2024
  • 前端(Ajax)
  • 日本东京阿里云200M不限流量轻量云主机测试报告
  • 如何利用云计算进行灾难恢复?
  • 发表文章去哪里投稿?软文推广常见的几种渠道类型
  • NAT 技术如何解决 IP 地址短缺问题?
  • 【项目日记(9)】项目整体测试,优化以及缺陷分析
  • 计算机网络 (15)宽带接入技术
  • 基于Python实现车辆检测、机动车检测、识别位置标记、计数
  • STM32-笔记22-sg90舵机
  • 雷军:科技传奇的逐梦之旅
  • ArrayList和LinkedList的区别是什么?