前端如何使用js去更改复制网页内容的格式(如复制的是表格,我们只想拿到他的内容文本)

博客讲述初级开发者遇到的需求,产品希望表格复制粘贴到别处是另一种格式。开发者通过监听 copy 事件,拿到复制内容并转化为所需结果,最后引入格式化方法实现了复制表格粘贴后只获取内容的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#在我看到这个需求的时候,我是不理解的,为什么电脑浏览器复制粘贴我可以去影响,可能这就是作为一个初级开发者的苦恼吧,起初是项目里显示的表格,产品想让复制完再粘贴到别的地方是另外一种格式,于是我找了各种方法,融合到一起,实现了复制下来的表格粘贴后只拿到内容的效果,话不多说,一起来看一下吧!#

一、首先我们看到的是表格,如果不主动影响浏览器的复制粘贴事件,粘贴下来的依旧会是表格的形式;

未影响复制粘贴事件前的粘贴结果如下图:

二、解决办法:

其实思路很简单,监听copy事件,拿到复制后的内容,再一步一步转化为自己想要的结果。

//连续选择多个文字复制后,粘贴时字符拼接连续成一段字符且不分段
export function copyStick() {
  console.log('-=-=-=-=-=-=-');
  document.addEventListener('copy', function (e) {
    // 事件处理逻辑
    if (window.getSelection().toString()) {
      // 阻止默认的复制行为
      e.preventDefault();
      // 获取被复制的内容
      var copiedHTML = window.getSelection().toString();
      console.log(copiedHTML,'copiedHTML');
      var rows = copiedHTML.replace(/\s+/g, ',').split(',');
      // var result = rows.filter(function (str) {
      //   return str.trim() !== "" && str.trim() !== '⠀';
      //   // return str && str.replace(/\s+/g, "").replace('⠀', '');
      // });
      var charRule = rows.join(''); // 去除每行末尾的换行符
      // 检查浏览器是否支持Clipboard API
      if (!navigator.clipboard) {
        console.error("浏览器不支持Clipboard API");
        return;
      }
      // 复制文本到剪贴板
      navigator.clipboard.writeText(charRule).then(function () {
        console.log("文本已成功复制到剪贴板",charRule);
      }, function () {
        console.error("复制文本到剪贴板失败");
      });
    }
  });
  // 格式化表格内容为纯文本形式
  function formatTableAsPlainText(html) {
    var tempDiv = document.createElement('div');
    tempDiv.innerHTML = html;
    // 移除表格中的样式和标签,只保留表格内容
    tempDiv.querySelectorAll('table').forEach(function (table) {
      table.removeAttribute('style');
      table.removeAttribute('class');
      table.removeAttribute('border');
      table.outerHTML = table.innerHTML;
    });
    return tempDiv.textContent;
  }
}

三、引入格式过的方法
最后只需要在自己想使用的文件里引入就可以啦!

import {copyStick,} from "../utils/index.js";
 

created() {
copyStick();
},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值