JS实现一键复制、选中复制、选中多行复制

JS实现一键复制

首先我们准备一份通用的一键复制代码:

javascript 复制代码
export function copyTextFun(text) {
    if (!text) return false
    var textarea = document.createElement('textarea') 
    textarea.value = text 
    document.body.appendChild(textarea) 
    textarea.select() 
    message.destroy()
    try {
        var successful = document.execCommand('copy') 
        if (successful) {
            console.log('成功')
        } else {
            console.log('失败')
        }
    } catch (err) {
        console.log('失败')
    } finally {
        document.body.removeChild(textarea) 
    }
}

上面的方法 就是传入文字,然后就可以实现复制,我们当然可以改造一下,改造成传入一个textarea元素,进入自动获取值,但是这个我们需要改造成获取textarea点击之后的事件对象,我们从中得到当前输入的值。

javascript 复制代码
export function copyText(text) {
    if (!text) return false
    let newText = ''
    if (typeof text !== 'string') {
        newText = (text && text.target && text.target.value) || ''
    } else {
        newText = text
    }
    var textarea = document.createElement('textarea') //创建临时的textarea元素
    textarea.value = newText //将要复制的内容赋值给textarea
    document.body.appendChild(textarea) //将textarea添加到页面上
    textarea.select() //选中textarea中的内容
    message.destroy()
    try {
        var successful = document.execCommand('copy') //执行复制命令
        if (successful) {
            message.success('成功复制!')
        } else {
            message.error('无法复制!')
        }
    } catch (err) {
        message.error('无法复制!')
    } finally {
        document.body.removeChild(textarea) //移除临时的textarea元素
    }
}

message方法是使用的antd的组件,你们可以换成你们自己的提示组件。

使用很简单:

javascript 复制代码
<TextArea onClick={copyText} readOnly rows={2} placeholder="请输入" />

这个时候我们已经可以实现点击复制当前文本框的内容,并提醒复制成功的消息弹窗。

但是我们还是不满足,有时候我们会自己想选择行的复制,拖黑选中的文字进行复制。

选中复制、选中多行复制

javascript 复制代码
function getSelectedText() {
    let selectedText = ''
    if (window.getSelection) {
        // 检查浏览器是否支持 window.getSelection()
        selectedText = window.getSelection().toString() // 获取选中的文本并转换为字符串
    } else if (document.selection && document.selection.type !== 'Control') {
        selectedText = document.selection.createRange().text
    }
    return selectedText
}
export function copyText(text) {
    if (!text) return false
    let newText = ''
    if (typeof text !== 'string') {
        newText = (text && text.target && text.target.value) || ''
        if (!newText) return false
        const newGetSelectedText = getSelectedText()
        // 如果选中的文字在当前输入框中 直接复制当前选中的文字
        if (newGetSelectedText && newGetSelectedText.trim() && newText.includes(newGetSelectedText)) {
            newText = newGetSelectedText
        }
    } else {
        newText = text
    }
    var textarea = document.createElement('textarea') //创建临时的textarea元素
    textarea.value = newText //将要复制的内容赋值给textarea
    document.body.appendChild(textarea) //将textarea添加到页面上
    textarea.select() //选中textarea中的内容
    message.destroy()
    try {
        var successful = document.execCommand('copy') //执行复制命令
        if (successful) {
            message.success('成功复制!')
        } else {
            message.error('无法复制!')
        }
    } catch (err) {
        message.error('无法复制!')
    } finally {
        document.body.removeChild(textarea) //移除临时的textarea元素
    }
}

使用还是和上面的一致,但是我们做了处理,在有选中的时候,点击了就能复制当前拖黑的内容,无论你选中几行,单行还是多行还是几个字,都能实现复制。

点击 -- 选中要复制的内容 -- 开松鼠标 -- 提示复制成功

好了 ,到这里 就完成了 这个小功能。

相关推荐
爱上好庆祝几秒前
svg图片
前端·css·学习·html·css3
橘子编程12 分钟前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
王夏奇18 分钟前
python中的__all__ 具体用法
java·前端·python
叫我一声阿雷吧1 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰1 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong231 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
田八1 小时前
聊聊AI的发展史,AI的爆发并不是偶然
前端·人工智能·程序员
zhanghongbin011 小时前
AI 采集器:Claude Code、OpenAI、LiteLLM 监控
java·前端·人工智能
IT_陈寒2 小时前
Python的列表推导式里藏了个坑,差点让我加班到凌晨
前端·人工智能·后端
吴声子夜歌2 小时前
ES6——正则的扩展详解
前端·mysql·es6