如何允许将 HTML 表格复制粘贴到 HTML textarea 标签中?
How do I allow copy-pasting of HTML tables into an HTML textarea tag?
TinyMCE、CKEditor 和 Froala 允许您将 HTML tables(例如从电子邮件或维基百科)直接复制粘贴到 HTML textarea
和HTML table 结构和标签被保留。
再举一个例子,我的基于 Web 的电子邮件客户端也可以执行此操作。我可以将收到的电子邮件中的 HTML table 复制到我要发送的电子邮件中,table 结构将被保留。
我知道这些编辑器不仅仅是 HTML 文本区域,而是富文本编辑器。我的问题:哪些浏览器功能允许进行富文本编辑?他们是怎么做到的?
据我所知,每次我将一些 HTML 复制粘贴到 textarea
中时,浏览器会删除所有 HTML 标签。
答案是 HTML 非常灵活,您不局限于用于用户交互的输入元素的默认行为。具体如何处理非明文粘贴,答案并不简单。
幸运的是,有一些开源富文本编辑器。例如,在 ckeditor 中,它由 clipboard pipeline 处理,它接受粘贴事件并在编辑器中应用正确的样式。
这些编辑器通常会有一个 user-visible <div>
元素作为呈现 table 的元素和一个隐藏的 <textarea>
元素,其中包含将要显示的实际标记提交表单时发送到服务器。
这是一个最简单的答案。感谢 Andrew Gillis 指导我找到具有类似内容的 CKEditor 源代码。
<html>
<head>
</head>
<body>
<textarea class="rich" cols="40" rows="8"></textarea>
</body>
<script>
const target = document.querySelector('textarea.rich');
target.addEventListener('paste', (event) => {
const clipboard_data = (event.clipboardData || window.clipboardData);
const text_paste_content = clipboard_data.getData('text/plain');
const html_paste_content = clipboard_data.getData('text/html');
// This what we see by default
console.log(text_paste_content)
// This is the raw HTML that can be used to make "rich" content
console.log(html_paste_content)
});
</script>
</html>
当您粘贴到 textarea
时,您将可以通过 html_paste_content
变量访问原始 HTML。
TinyMCE、CKEditor 和 Froala 允许您将 HTML tables(例如从电子邮件或维基百科)直接复制粘贴到 HTML textarea
和HTML table 结构和标签被保留。
再举一个例子,我的基于 Web 的电子邮件客户端也可以执行此操作。我可以将收到的电子邮件中的 HTML table 复制到我要发送的电子邮件中,table 结构将被保留。
我知道这些编辑器不仅仅是 HTML 文本区域,而是富文本编辑器。我的问题:哪些浏览器功能允许进行富文本编辑?他们是怎么做到的?
据我所知,每次我将一些 HTML 复制粘贴到 textarea
中时,浏览器会删除所有 HTML 标签。
答案是 HTML 非常灵活,您不局限于用于用户交互的输入元素的默认行为。具体如何处理非明文粘贴,答案并不简单。
幸运的是,有一些开源富文本编辑器。例如,在 ckeditor 中,它由 clipboard pipeline 处理,它接受粘贴事件并在编辑器中应用正确的样式。
这些编辑器通常会有一个 user-visible <div>
元素作为呈现 table 的元素和一个隐藏的 <textarea>
元素,其中包含将要显示的实际标记提交表单时发送到服务器。
这是一个最简单的答案。感谢 Andrew Gillis 指导我找到具有类似内容的 CKEditor 源代码。
<html>
<head>
</head>
<body>
<textarea class="rich" cols="40" rows="8"></textarea>
</body>
<script>
const target = document.querySelector('textarea.rich');
target.addEventListener('paste', (event) => {
const clipboard_data = (event.clipboardData || window.clipboardData);
const text_paste_content = clipboard_data.getData('text/plain');
const html_paste_content = clipboard_data.getData('text/html');
// This what we see by default
console.log(text_paste_content)
// This is the raw HTML that can be used to make "rich" content
console.log(html_paste_content)
});
</script>
</html>
当您粘贴到 textarea
时,您将可以通过 html_paste_content
变量访问原始 HTML。