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

Express+Handlebars复制文本到剪贴板报错:TypeError: code.select is not a function

解决剪贴板复制报错问题

错误原因

你当前的code变量是字符串类型——通过split("- ").pop()从HTML内容里提取的纯文本,而select()、setSelectionRange()是<input>、<textarea>这类DOM输入元素的专属方法,字符串本身没有这些方法,所以会抛出TypeError。另外字符串也不存在value属性,直接使用code作为复制参数即可。

修复方案1:直接使用剪贴板API(推荐)

跳过选中文本的步骤,直接把字符串传入剪贴板API完成复制:

function copyLink() {
    var copytext = document.getElementById('alcslink').innerHTML;
    let code = copytext.split("- ").pop(); /* 提取目标文本 */
    // 直接复制字符串到剪贴板
    navigator.clipboard.writeText(code)
        .then(() => {
            // 可选:复制成功后的提示,比如 alert('复制成功')
            console.log('复制成功');
        })
        .catch(err => {
            console.error('复制失败:', err);
        });
}

修复方案2:兼容旧浏览器(创建临时输入框)

如果需要适配不支持navigator.clipboard的旧浏览器,可以创建隐藏的临时输入元素来完成复制:

function copyLink() {
    var copytext = document.getElementById('alcslink').innerHTML;
    let code = copytext.split("- ").pop(); /* 提取目标文本 */
    
    // 创建临时input元素
    const tempInput = document.createElement('input');
    tempInput.value = code;
    // 隐藏元素避免影响页面布局
    tempInput.style.position = 'absolute';
    tempInput.style.left = '-9999px';
    document.body.appendChild(tempInput);
    
    // 选中并复制文本
    tempInput.select();
    tempInput.setSelectionRange(0, 99999); // 适配移动端
    document.execCommand('copy');
    
    // 移除临时元素
    document.body.removeChild(tempInput);
    
    // 可选:复制成功提示
    console.log('复制成功');
}

内容的提问来源于stack exchange,提问作者Naveen Ravi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:21:43