• js如何实现复制文本内容的功能
  • 发布于 2个月前
  • 798 热度
    0 评论

我们在很多网站上都会看到系统会提供一个复制按钮,我们只要点击这个复制按钮,系统就会把文本复制到剪切板,这个功能是怎么实现的呢?其实我们只要使用js里的clipboardData对象,就能实现复制文本的功能,具体来看一下下面这个例子吧。

实例:


const copyText = (text) => {
  // 堆代码 duidaima.com
  // 方法1:尝试使用clipboardData对象将文本复制到剪贴板中
  const clipboardData = window.clipboardData;
  if (clipboardData) { // 如果clipboardData对象存在,说明浏览器支持此方法
    clipboardData.clearData(); // 清除剪贴板中的旧数据
    clipboardData.setData('Text', text); // 将text数据复制到剪贴板中
    return true; // 返回复制成功
  } 
  // 方法2:使用document.execCommand方法将文本复制到剪贴板中
  // 注意,该方法已经被弃用,但仍然有些浏览器支持,使用时要注意兼容性
  else if (document.execCommand) {
    // 创建一个textarea元素,并将需要复制的文本赋值给它
    const el = document.createElement('textarea');
    el.value = text;
    el.setAttribute('readonly', ''); // 设置为只读模式,防止用户误操作
    el.style.position = 'absolute';
    el.style.left = '-9999px'; // 将元素的left设置为-9999px,相当于将其放到屏幕外面
    document.body.appendChild(el); // 将该元素添加到body中
    el.select(); // 选中该元素中的文本
    // 将该元素中的文本复制到剪贴板中
    document.execCommand('copy');
    // 删除该元素
    document.body.removeChild(el);
    return true; // 返回复制成功
  }
  return false; // 复制失败
}

copyText('hello!') // 将 'hello!' 文本复制到剪贴板中,返回 true


该函数用于将指定的文本复制到剪贴板中。它首先尝试使用clipboardData对象将文本复制到剪贴板中,如果该对象存在,说明浏览器支持此方法,直接调用其setData方法将文本复制到剪贴板中。

如果clipboardData对象不存在,该函数则尝试使用document.execCommand方法将文本复制到剪贴板中。该方法已经被弃用,但仍然有些浏览器支持。在该方法中,我们先创建一个textarea元素,并将需要复制的文本赋值给它。然后,将该元素添加到body中,将其left设置为-9999px,相当于将其放到屏幕外面。接着,选中该元素中的文本,调用document.execCommand方法将该元素中的文本复制到剪贴板中,最后再将该元素删除。

注意,这个函数只是尝试复制文本到剪贴板,实际是否成功复制要取决于浏览器是否支持该方法。如果两种复制方式都不支持,则返回false。
用户评论