之前处理了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);
到这就问题就成功解决了。或者有其他的更好的方法,但是目前我就只想到这样的解决方法。