当前位置:首页 > JavaScript

js实现复制功能

2026-02-28 17:57:29JavaScript

原生JavaScript实现复制功能

使用document.execCommand方法(已废弃但仍有广泛兼容性)

function copyToClipboard(text) {
  const textarea = document.createElement('textarea');
  textarea.value = text;
  document.body.appendChild(textarea);
  textarea.select();
  document.execCommand('copy');
  document.body.removeChild(textarea);
}

现代Clipboard API实现

推荐使用更现代的异步Clipboard API

async function copyToClipboard(text) {
  try {
    await navigator.clipboard.writeText(text);
    console.log('内容已复制到剪贴板');
  } catch (err) {
    console.error('无法复制内容: ', err);
  }
}

处理无权限情况

添加权限检查和降级方案

async function safeCopy(text) {
  if (!navigator.clipboard) {
    return fallbackCopy(text);
  }

  try {
    await navigator.clipboard.writeText(text);
    return true;
  } catch {
    return fallbackCopy(text);
  }
}

function fallbackCopy(text) {
  const textarea = document.createElement('textarea');
  textarea.value = text;
  textarea.style.position = 'fixed';
  document.body.appendChild(textarea);
  textarea.focus();
  textarea.select();

  try {
    const successful = document.execCommand('copy');
    document.body.removeChild(textarea);
    return successful;
  } catch {
    document.body.removeChild(textarea);
    return false;
  }
}

复制特定元素内容

复制DOM元素内的文本

function copyElementText(elementId) {
  const element = document.getElementById(elementId);
  if (element) {
    const range = document.createRange();
    range.selectNode(element);
    window.getSelection().removeAllRanges();
    window.getSelection().addRange(range);
    document.execCommand('copy');
    window.getSelection().removeAllRanges();
  }
}

添加用户反馈

复制成功后提供视觉反馈

js实现复制功能

async function copyWithFeedback(text, feedbackElement) {
  try {
    await navigator.clipboard.writeText(text);
    if (feedbackElement) {
      feedbackElement.textContent = '已复制!';
      setTimeout(() => {
        feedbackElement.textContent = '';
      }, 2000);
    }
  } catch (err) {
    if (feedbackElement) {
      feedbackElement.textContent = '复制失败';
    }
  }
}

注意事项

  • 现代Clipboard API需要安全上下文(HTTPS或localhost)
  • 某些浏览器可能要求此API必须在用户交互事件中触发
  • 考虑添加降级方案以兼容旧浏览器
  • 移动设备上可能需要特殊处理选择范围

标签: 功能js
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…