javascript将富文本内容复制到剪贴板

mar*_*arv 25 html javascript clipboard

前提

我需要帮助使用JavaScript将富文本复制到剪贴板.我四处搜寻,但没有找到适合我特定需求的东西.

function ctrlA1(corp) {
  with(corp) {}
  if (document.all) {
    txt = corp.createTextRange()
    txt.execCommand("Copy")
  } else
    setTimeout("window.status=''", 5000)
}
Run Code Online (Sandbox Code Playgroud)
<div id="sc1">hello <br> <b> world </b> </div>
<button onclick="ctrlA1(document.getElementById('sc1') )"></button>
Run Code Online (Sandbox Code Playgroud)

问题

上述代码不起作用,导致了object expected error.任何帮助表示赞赏!我在那里看过一个叫做库的库zeroclipboard,但我更喜欢编写自己的函数.


编辑:

我现在有这个功能来选择页面上的文字.是否可以编写一个公式来按原样复制所选范围?

function containerSelect(id) {
  containerUnselect();
  if (document.selection) {
    var range = document.body.createTextRange();
    range.moveToElementText(id);
    range.select();
  } else if (window.getSelection) {
    var range = document.createRange();
    range.selectNode(id);
    window.getSelection().addRange(range);
  }
}
Run Code Online (Sandbox Code Playgroud)
<label onclick="containerSelect(this); select_all()">
  <p>hello world</p>
  <img src="imagepath.png">
</label>
Run Code Online (Sandbox Code Playgroud)

Joh*_*kel 28

随着现代浏览器,如果你想复制富文本而已,有一个很简单的解决方案,而无需使用任何软件包.见http://jsfiddle.net/jdhenckel/km7prgv4/3

这是小提琴的源代码

<button onclick="copyToClip(document.getElementById('foo').innerHTML)">
  Copy the stuff
  </button>

<div id=foo style="display:none">
  This is some data that is not visible. 
  You can write some JS to generate this data. 
  It can contain rich stuff.  <b> test </b> me <i> also </i>
  <span style="font: 12px consolas; color: green;">Hello world</span> 
  You can use setData to put TWO COPIES into the same clipboard, 
  one that is plain and one that is rich. 
  That way your users can paste into either a
  <ul>
    <li>plain text editor</li>
    <li>or into a rich text editor</li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

功能

function copyToClip(str) {
  function listener(e) {
    e.clipboardData.setData("text/html", str);
    e.clipboardData.setData("text/plain", str);
    e.preventDefault();
  }
  document.addEventListener("copy", listener);
  document.execCommand("copy");
  document.removeEventListener("copy", listener);
};
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用稍微修改的代码来为无法呈现 html 的编辑器提供纯文本版本:http://jsfiddle.net/kt4jdm95/1/ (3认同)
  • 在 Safari 11.1.1 中不起作用。没有任何副本,以前在剪贴板上的内容仍然存在。 (2认同)

ant*_*oPa 10

以下是我使用新的剪贴板 API 测试的示例:

const content = '<a href="http://google.com/">test</a>';
const blob = new Blob([content], {type: 'text/html'});
const clipboardItem = new window.ClipboardItem({ 'text/html': blob });
navigator.clipboard.write([clipboardItem]);
Run Code Online (Sandbox Code Playgroud)

使用此方法,您可以将 html 复制到剪贴板。需要注意的一件有用的事情是,这可以包含图像(可以是 dataURL)。这是我发现将多个图像粘贴到剪贴板的唯一方法。


SFl*_*agg 9

这个小小的JS插件在不使用Flash的情况下复制了richtext :https: //www.npmjs.com/package/clipboard-js

它基于https://clipboardjs.com/ - 但在我看来这是一个升级版,因为原版仅支持纯文本.

代码很简单:

clipboard.copy({
    "text/html": "<i>Markup</i> <b>text</b>. Paste me into a rich text editor."
});
Run Code Online (Sandbox Code Playgroud)

  • 使用现代浏览器,如果您只想要COPY RICH TEXT,那么有一个非常简单的解决方案**而不使用任何包**.见https://jsfiddle.net/jdhenckel/km7prgv4/3/ (5认同)
  • 只是要指出,对于IE @ SFlagg的解决方案不会复制富文本,而只会复制纯文本 (2认同)

mar*_*arv -4

我搜索了一个星期终于找到了答案!对于那些希望使用 JavaScript 将富文本复制到剪贴板的人,然后使用下面链接中的功能,效果就像一个魅力。不需要闪光灯和其他建议的东西:)

使用 JavaScript/jquery 将图像复制到剪贴板

  • 这是针对图像,而不是富文本。无论如何,它只是 IE :-( (2认同)