javascript - 在不使用剪贴板的情况下创建文本选择的克隆
问题描述
对于我的应用程序,我需要一种带有历史记录的内部剪贴板。我不能使用剪贴板 api(据我所知),因为这需要用户的许可,这不是一个选项。
我不想保留粗体、斜体和删除线等格式。
我正在考虑从 window.getSelection() 获取内容,但是没有办法轻松克隆选择中的所有 html。
内容需要进入另一个容器元素才能显示在应用程序的某个位置。
任何关于如何实现这一目标的想法都受到高度赞赏。
最好的马蒂亚斯
编辑:我已经中断了复制事件并将其替换为自定义函数。我需要做的是从anchorNode开始,削减一些可能的偏移量,然后前进到focusNode(也有偏移量)。此外,所有未知/不需要的标签(span、h1、div 等都需要删除,但文本内容应保留)。我希望有人已经完成了这个或类似的任务,这样我可以节省一些时间:/
解决方案
该copy
活动可以帮助您,因为它不需要任何工作许可。
var clipHistory = [];
document.addEventListener('copy', (event) => {
const selection = document.getSelection();
clipHistory.push(selection.toString());
event.preventDefault(); // optional, it prevents to modify the user's clipboard
});
// other functions can access clipHistory
一件好事是该copy
事件得到了很好的支持。
Unlcukly 这个解决方案删除了格式,但保留它的方法是使用 a并手动<div contenteditable id="parse-div"></div>
触发事件。parse
我找到了一个有趣的类:Range
一个,但它不允许设置非#text 元素的开始和结束偏移量,据我所知。
推荐阅读
- swift - 如何在swift中隐藏文本字段并自动布局约束
- cuda - 'sudo dnf install cuda' 后'which' 没有找到 cuda
- r - 如何以毫秒为单位将纪元时间转换为人类可读的时间
- c++ - 无法在 Visual Studio 程序中运行合并排序
- grails - Grails:从缩小中排除 JS 文件
- mercurial - Mercurial 禁用自动推送提交
- angular - 如何使用辅助端点为 Angular 库创建 API
- php - 如何在php中显示数据(按bool类型的表列名分为2)
- javascript - 由于头部中的 js 文件挂起下载,应用程序未得到渲染
- java - http 服务器的 Netty 内存泄漏。什么时候发布消息?