Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在复制到剪贴板的文本区域中添加新行?_Javascript_Reactjs - Fatal编程技术网

Javascript 如何在复制到剪贴板的文本区域中添加新行?

Javascript 如何在复制到剪贴板的文本区域中添加新行?,javascript,reactjs,Javascript,Reactjs,这是我的“复制到剪贴板”代码,我使用的是textarea,但当我将复制的内容粘贴到代码上时,所有内容都在一行上: const CopyButton = ({ text }: { text: string }) => { const init_val = 'Copy'; const [btn_val, set_value] = useState(init_val); const copyToClipboard = () => { const textField =

这是我的“复制到剪贴板”代码,我使用的是textarea,但当我将复制的内容粘贴到代码上时,所有内容都在一行上:

const CopyButton = ({ text }: { text: string }) => {
  const init_val = 'Copy';
  const [btn_val, set_value] = useState(init_val);
  const copyToClipboard = () => {
    const textField = document.createElement('textarea');
    textField.innerText = text;
    document.body.appendChild(textField);
    textField.select();
    document.execCommand('copy');
    textField.remove();
    set_value('Copied!');
    setTimeout(() => {
      set_value(init_val);
    }, 1500);
  };

  return (
    <button className='copy-to-clipboard' onClick={copyToClipboard}>
      {btn_val}
    </button>
  );
};

我正在考虑用regexp解决这个问题,但不知道如何解决,似乎也找不到解决办法。

正如您在我的代码中看到的,我正在使用innerText,我在周围搜索并尝试使用textContent,结果成功了,只需在我的代码中将innerText替换为textContent:

textField.textContent = text;
您需要使用或,textField.innerText将删除某些字符,例如新行


请小心使用innerHTML,因为这将允许复制功能的用户在您的站点中插入自己的HTML,这可能会导致跨站点脚本XSS问题

您必须使用空白:pre,因为HTML会删除空白。您可以尝试以下代码:

const CopyButton = ({ text }: { text: string }) => {
const init_val = 'Copy';
const [btn_val, set_value] = React.useState(init_val);
const copyToClipboard = () => {
  const textField = document.createElement('textarea');
  var newParagraph = document.createElement('p');
  var newContent = document.createTextNode("Samson's SR500 headphones offer exceptional sonic \nclarity and comfort in a durable, lightweight design \nperfect for studio and movile applications.");
  newParagraph.appendChild(newContent)
  document.body.appendChild(newParagraph);
  document.body.style ="white-space: pre";
  textField.select();
  document.execCommand('copy');
  textField.remove();
  set_value('Copied!');
  setTimeout(() => {
    set_value(init_val);
  }, 1500);
};

return (
  <div>
    <button className='copy-to-clipboard' onClick={copyToClipboard}>
        {btn_val}
    </button>
  </div>


 );
};
参考资料:

堆栈溢出。从中获取文本时如何保留换行符 文本区?堆栈溢出。 2019年10月31日访问 詹妮弗·麦登。在JavaScript字符串中创建换行符。2019年10月31日访问 moz://a. Document.createElement。MDN web文档moz://a. 2019年10月31日访问
@我很高兴选择这个作为最佳答案。