js实现div复制
使用document.execCommand方法(已废弃但部分浏览器仍支持)
function copyDivUsingExecCommand(divId) {
const div = document.getElementById(divId);
const range = document.createRange();
range.selectNode(div);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand('copy');
window.getSelection().removeAllRanges();
}
该方法通过创建文本范围并执行复制命令实现,但注意execCommand已不被现代标准推荐。

使用现代Clipboard API
async function copyDivUsingClipboardAPI(divId) {
const div = document.getElementById(divId);
try {
await navigator.clipboard.writeText(div.innerText);
console.log('内容已复制');
} catch (err) {
console.error('复制失败:', err);
}
}
需要HTTPS环境或localhost,支持文本内容复制,是最新的标准方法。

复制带HTML格式的内容
async function copyDivWithHTML(divId) {
const div = document.getElementById(divId);
const htmlContent = new Blob([div.innerHTML], { type: 'text/html' });
const textContent = new Blob([div.innerText], { type: 'text/plain' });
const data = new ClipboardItem({
'text/html': htmlContent,
'text/plain': textContent
});
try {
await navigator.clipboard.write([data]);
} catch (err) {
console.error('复制失败:', err);
}
}
这种方法可以保留原始HTML格式,适合需要富文本复制的场景。
创建临时textarea元素
function copyDivViaTextarea(divId) {
const div = document.getElementById(divId);
const textarea = document.createElement('textarea');
textarea.value = div.innerText;
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
}
兼容性较好的方案,适用于不需要HTML格式的纯文本复制场景。
注意事项
- 现代浏览器推荐使用Clipboard API
- 某些浏览器可能要求用户首次操作触发复制权限
- 移动端设备可能需要特殊处理
- 复制富文本内容时需要考虑样式丢失问题
选择方法时应根据目标浏览器支持情况和具体需求决定。






