js如何在粘贴文本到指定组件之前做内容替换?

作者站长头像
站长
· 阅读数 9

js如何在粘贴文本到指定组件之前做内容替换?

回复
1个回答
avatar
test
2024-06-30

可以使用粘贴事件监听器或者一个新特性 ClipboardEvent.clipboardData

因为 clipboardData 还处于实验阶段,以下解决方案兼容性有待考证(但根据浏览器兼容性列表,主流浏览器都有实现,所以问题不大)

// 获取富文本编辑器
const editorElement = document.getElementById('rich-text-editor');

// 监听粘贴事件
editorElement.addEventListener('paste', function(event) {
  // 阻止默认的粘贴行为
  event.preventDefault();

  // 获取剪贴板中的文本数据
  const clipboardData = event.clipboardData || window.clipboardData;
  const pastedText = clipboardData.getData('text/plain');

  // 清除HTML和JavaScript代码,只保留纯文本部分
  const plainText = stripTagsAndScripts(pastedText);

  // 在富文本编辑器中插入纯文本内容
  insertPlainText(editorElement, plainText);
});

// 清除HTML和JavaScript
function stripTagsAndScripts(text) {
   // 正则表达式清除不需要的元素,只保留纯文本部分。
   return text.replace(/<[^>]+>/g, '').replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '');
}

// 向富文本中插入内容(根据需求自定义)
function insertPlainText(element, content) {
   // 这里我只是简单地追加
   element.innerText += content;
}

上面只是简单实现插入,如果想具体插入到光标所在位置等更复杂的需求可以参考下方 Selection 链接自行完善

参考clipboardData MDNSelection MDN
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容