复制文档到剪切板中空格,换行等会丢失的问题

797 阅读2分钟

之前处理了fetch流的问题的时候,后端返回的流是含有空格、换行等内容的,当时是渲染到div中空格和换行丢了的问题。后来用css样式属性white-space解决了。现在是要将当前渲染的流复制到剪切板中。也发现了会有空格和换行的样式丢失的问题。

一:复制到剪切板

复制内容到剪切版中一般都是用下面的方法,当然也有其他的方法,由于我用的是这种,所以就记录了使用这种方式应该怎么解决样式丢失的问题。 这里用的是document.createElement("input") 的方法来放置复制到的内容。

let content='   a b c d 
            d e f ^'//包含换行,空格等样式

var input = document.createElement("input"); 
document.body.appendChild(input); 
input.setAttribute("value", content); 
input.select(); 
if (document.execCommand("copy")) 
{   
  document.execCommand("copy"); 
}
document.body.removeChild(input);

二:样式会丢失的原因

既然用的是input,会不会是input不会将空格和换行输入的原因,然后就去看了input的存放内容是否包含空格和换行等。看完后发现,确实input不会将空格和换行放到内容中,换行后的空格也不会写进去。就是因为这个原因,才导致的了使用 document.createElement("input") 时,样式会丢失的问题。

三:解决问题

找到了问题就想着怎么去解决问题,当时想的是如果input不会将空格和换行放到内容中,应该还有其他的什么输入框能写入内容,同时也会保存内同格式的。然后就想到了用textarea应该是可以的。

后来发现textarea确实是可以的,因为textarea是一个多行的文本输入控件,是支持空格,换行等样式的存在的。

let content='   a b c d 
      d e f ^'//包含换行,空格等样式
var tempInput = document.createElement("textarea");
document.body.appendChild(tempInput);
tempInput.value = content;
tempInput.select();
document.execCommand("copy");
document.body.removeChild(tempInput);

到这就问题就成功解决了。或者有其他的更好的方法,但是目前我就只想到这样的解决方法。