html - 使用 Typescript 修改复制选择的格式
问题描述
我希望修改从 div 制作的任何副本,省略剪贴板中的任何背景格式信息。本质上,这是我得到的代码:
$('#selected-div').off('copy').on('copy', () => {
var selectedContent = document.getSelection();
// modify the formatting of selectedContent to omit any background styling
navigator.clipboard.write(selectedContent);
});
我正在努力解释 Selection 对象类型的文档,并且无法弄清楚如何访问/修改格式。我可以用什么代替上面的评论来达到预期的结果?如果存在,我想保留任何与背景无关的格式。
我也不确定 clipboard.write() 函数是否可行。我的开发工作室报告了一个错误,声称“写入”不是“剪贴板”类型的属性,并且一些研究似乎表明该功能并未得到普遍支持。我可以让 writeText 可靠地工作,但我确实需要将复制的文本与选择的任何非背景格式规则相关联。是否有更好的功能可用于将 Selection 对象复制到剪贴板?
解决方案
可以将 html 内容设置到剪贴板中。当用户从网站复制文本时会发生这种情况。通过粘贴到此工具中,您可以准确查看复制到剪贴板的内容:https ://evercoder.github.io/clipboard-inspector/
例如,如果我复制您问题的第一个短语并将其粘贴进去,我会得到:
根据该输出,您可以执行以下操作来格式化复制的文本与屏幕上看到的不同:
const style = "color: rgb(0, 255, 0); font-family: -apple-system, BlinkMacSystemFont, \";Segoe UI\", \"Liberation Sans\", sans-serif; font-size: 15px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(80, 80, 100); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;";
document.querySelector(".text")
.addEventListener("copy", event => {
const text = document.getSelection().toString();
const span = document.createElement("span");
span.setAttribute("style", style);
span.innerText = text;
event.clipboardData.setData("text/html", span.outerHTML);
event.preventDefault();
});
.text {
background: #333;
color: #fff;
padding: 1rem;
}
<div class="text">
Distinctio sint odit debitis possimus esse dolorem officiis ipsa. Laboriosam repellendus deleniti voluptates similique. Nesciunt eos eius dolorum consequatur labore mollitia cum. Qui cumque amet ut quia ipsam dolore eos. Quaerat aperiam enim quasi nihil.
</div>
您需要使用它来获得您想要的东西,并且您总是会受到您要粘贴到的应用程序的突发奇想的影响。例如,我尝试过的某些背景/前景组合不被 Word 接受。它只会在粘贴时将其更改为更正常的颜色。所以我认为这永远不会坚如磐石,但它可能会满足你的需要。
推荐阅读
- python - 连接被对方拒绝:10061:无法建立连接,因为目标机器主动拒绝它
- c# - 如何将参数传递到此存储过程
- sql - 如何创建一个新列,显示表中的最大日期和行中的日期之间的差异?
- flutter - 无法访问冻结类上的 copyWith 方法
- swift - 澄清 Swift 字典和 map[x]!.append(product) 到 Kotlin 的可能翻译
- javascript - 排序对象和嵌套对象
- mysql - MySQL CASE 函数给出了意想不到的结果
- node.js - JEST expect.anything() 或 null
- python - 尝试导入 minerl 时出现错误
- python - Python:将文件名更改为列表中的人名