首页 > 解决方案 > 在不使用剪贴板的情况下创建文本选择的克隆

问题描述

对于我的应用程序,我需要一种带有历史记录的内部剪贴板。我不能使用剪贴板 api(据我所知),因为这需要用户的许可,这不是一个选项。

我不想保留粗体、斜体和删除线等格式。

我正在考虑从 window.getSelection() 获取内容,但是没有办法轻松克隆选择中的所有 html。

内容需要进入另一个容器元素才能显示在应用程序的某个位置。

任何关于如何实现这一目标的想法都受到高度赞赏。

最好的马蒂亚斯

编辑:我已经中断了复制事件并将其替换为自定义函数。我需要做的是从anchorNode开始,削减一些可能的偏移量,然后前进到focusNode(也有偏移量)。此外,所有未知/不需要的标签(span、h1、div 等都需要删除,但文本内容应保留)。我希望有人已经完成了这个或类似的任务,这样我可以节省一些时间:/

标签: javascripttypescript

解决方案


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 元素的开始和结束偏移量,据我所知。


推荐阅读