WordPress 编辑器在复制和粘贴时如何保留文本格式?
How does WordPress editor preserve formatting of text when copy and pasted?
我注意到当我们从其他地方复制并粘贴一些东西到 WordPress 编辑器时,它会保留其原始形式。粘贴的数据不仅仅是一些文本,还有 HTML 和 CSS。 WordPress 是如何做到的?我可以提供代码示例或参考吗?
我假设(我没看过)他们响应 paste
event and use the getData
method of the clipboardData
property of the ClipboardEvent
对象,要求它提供格式化文本(可能传递 "text/html"
作为格式参数)。然后他们获取结果 HTML 并将其包含在编辑器中。
例如:如果您将上面段落的文本复制到剪贴板,那么 运行 这个片段并点击片段正文中的任意位置,然后按系统上的粘贴键盘快捷键 (Ctrl+ V 等),它应该显示剪贴板中 格式化的 文本:
document.addEventListener("paste", function(e) {
document.getElementById("output").innerHTML =
(e.clipboardData && e.clipboardData.getData("text/html")) || "";
});
<div>Click here to focus the window, then do a paste</div>
<div id="output"></div>
如果他们在 "text/html"
中没有得到任何东西,他们可能会退回到 "text/plain"
:
document.addEventListener("paste", function(e) {
if (e.clipboardData) {
var output = document.getElementById("output");
var str = e.clipboardData.getData("text/html");
if (str) {
console.log("html");
output.innerHTML = str;
} else {
console.log("plain text");
str = e.clipboardData.getData("text/plain");
output.textContent = str;
}
}
});
<div>Click here to focus the window, then do a paste</div>
<div id="output"></div>
我注意到当我们从其他地方复制并粘贴一些东西到 WordPress 编辑器时,它会保留其原始形式。粘贴的数据不仅仅是一些文本,还有 HTML 和 CSS。 WordPress 是如何做到的?我可以提供代码示例或参考吗?
我假设(我没看过)他们响应 paste
event and use the getData
method of the clipboardData
property of the ClipboardEvent
对象,要求它提供格式化文本(可能传递 "text/html"
作为格式参数)。然后他们获取结果 HTML 并将其包含在编辑器中。
例如:如果您将上面段落的文本复制到剪贴板,那么 运行 这个片段并点击片段正文中的任意位置,然后按系统上的粘贴键盘快捷键 (Ctrl+ V 等),它应该显示剪贴板中 格式化的 文本:
document.addEventListener("paste", function(e) {
document.getElementById("output").innerHTML =
(e.clipboardData && e.clipboardData.getData("text/html")) || "";
});
<div>Click here to focus the window, then do a paste</div>
<div id="output"></div>
如果他们在 "text/html"
中没有得到任何东西,他们可能会退回到 "text/plain"
:
document.addEventListener("paste", function(e) {
if (e.clipboardData) {
var output = document.getElementById("output");
var str = e.clipboardData.getData("text/html");
if (str) {
console.log("html");
output.innerHTML = str;
} else {
console.log("plain text");
str = e.clipboardData.getData("text/plain");
output.textContent = str;
}
}
});
<div>Click here to focus the window, then do a paste</div>
<div id="output"></div>