You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用copyToClipboard复制textarea内容时文本在引号前截断的解决办法

解决textarea含引号内容复制截断的问题

这个问题的核心原因是你错误地使用了innerHTML来获取textarea的内容——textarea作为表单输入控件,它的文本内容应该通过value属性来读取,而非innerHTML。当内容里包含双引号时,innerHTML会把它当作HTML属性的结束标记,直接导致内容被意外截断。

修复后的JavaScript代码

把你原代码里的这一行:

aux.setAttribute("value", document.getElementById(elementId).innerHTML);

替换成:

aux.setAttribute("value", document.getElementById(elementId).value);

完整的修复后函数如下:

function copyToClipboard(elementId) {
    // 创建一个临时input
    var aux = document.createElement("input");
    // 读取目标textarea的value值赋值给input
    aux.setAttribute("value", document.getElementById(elementId).value);
    // 将input添加到页面
    document.body.appendChild(aux);
    // 选中input内的文本
    aux.select();
    // 执行复制操作
    document.execCommand("copy");
    // 移除临时input
    document.body.removeChild(aux);
}

额外优化建议(可选)

现在document.execCommand("copy")已被标记为废弃,推荐使用更现代的Clipboard API,代码更简洁且兼容性更好:

function copyToClipboard(elementId) {
    const textarea = document.getElementById(elementId);
    navigator.clipboard.writeText(textarea.value)
        .then(() => {
            // 这里可以添加复制成功的提示,比如修改按钮文字
            const button = event.target;
            button.textContent = "已复制!";
            setTimeout(() => button.textContent = "Copy general text", 2000);
        })
        .catch(err => {
            console.error("复制失败:", err);
        });
}

使用这个方法不需要创建额外的input元素,还能完美处理包含引号、特殊字符的文本内容。另外,你的按钮上设置的data-clipboard-text属性如果没有搭配Clipboard.js库使用,其实是多余的,可以移除避免混淆。

内容的提问来源于stack exchange,提问作者Jasen Donoer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:34:25