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
相关产品推荐
相关产品推荐

