html+js写一个可编辑的元素 支持直接向上粘贴文本或图片

有一说一来讲 CSDN 博客的编辑器还是非常厉害的

能够完美设配图片与文字的粘贴与输入

但其实 如果做个捡漏版的 js也可以完成

但这里 为了方便 我选择了vue2的环境

参考代码如下

html 复制代码
<template>
  <div class="editable-div" contenteditable="true" @paste="handlePaste" ref="editableDiv"></div>
</template>

<script>
export default {
  methods: {
    handlePaste(event) {
      event.preventDefault();

      const clipboardData = (event.clipboardData || event.originalEvent.clipboardData);
      let items = clipboardData.items;
      let dedalock = 1;
      const target = this.$refs.editableDiv;
      for (const item of items) {
        if(dedalock == 2) {
          break
        }else if(dedalock == 1) {
          dedalock = 2;
        }
        if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {
          const file = item.getAsFile();
          const reader = new FileReader();

          reader.onload = () => {
            const img = document.createElement('img');
            img.src = reader.result;
            target.appendChild(img);
          };

          reader.readAsDataURL(file);
        } else if (item.kind === 'string') {
          debugger
          item.getAsString((text) => {
            const regex = /<img src="(.*?)"/;
            const match = text.match(regex);

            if (match) {
              const img = document.createElement('img');
              img.src = match[1];
              target.appendChild(img);
            } else {
              console.log(text);
              document.execCommand('insertText', false, text);
            }
          });
        }
      }
    }
  }
};
</script>

<style scoped>
.editable-div {
  border: 1px solid #ccc;
  padding: 10px;
  min-height: 100px;
}
</style>

我们运行项目

因为 contenteditable 单纯的输入内容肯定是没问题的

然后 我复制一段文本

粘贴进去

文本已经没有任何问题

然后我们来试图片

我们先试截个图

然后粘贴进去

直接进来 也是没有任何问题

然后 我们可以试试在百度图片上复制一个

然后拿过去粘贴

也是没有任何问题

当然 因为是手写的js 没有任何工具 BUG肯定会比较多 大家可能也需要自己慢慢完善

相关推荐
G***E31616 分钟前
前端在移动端中的React Native Web
前端·react native·react.js
云烟飘渺o24 分钟前
JPA 的脏检查:一次“没 save() 却更新了”的排查记录
前端
Neptune128 分钟前
深入浅出:理解js的‘万物皆对象’与原型链
前端·javascript
阿迷不想上班28 分钟前
windows自动任务定期执行
javascript
王霸天31 分钟前
扒一扒 Vue3 大屏适配插件 vfit 的源码:原来这么简单?
前端
王霸天38 分钟前
拒绝 rem 计算!Vue3 大屏适配,我是这样做的 (vfit 使用体验)
前端
xinyu_Jina41 分钟前
ikTok Watermark Remover:客户端指纹、行为建模与自动化逆向工程
前端·人工智能·程序人生·信息可视化
盗德1 小时前
最全音频处理WaveSurfer.js配置文档
前端·javascript
Heo1 小时前
关于Gulp,你学这些就够了
前端·javascript·面试
Irene19911 小时前
web前端开发岗位就业前景和未来变化分析(附:AI技术如何进一步影响前端工作)
前端