js复制功能,可粘贴到文档,粘贴栏(复制内容有格式)

在网上看了很多的帖子,发现用input是不可以的(多数帖子都是用的input),要用textarea。

我主要是用来复制后端传来的日志文档

情景:返回的list列表中,需要有复制功能,可以复制当前内容,并且 当前内容有需要换行的需求。 代码如下:(vue项目)

HTML:

<ul>
    <li v-for='(item,key) in content’ :key=’key’ @click=”copyContent(item)” style=’white-space: pre-wrap;’>                        
         { {item}}
    </li>
</ul>
 JS:

data() {
    return{
        item:[{
        content:’内容1\r\n内容被换行’
        },{
        content:’内容2′
        },{
        content:’内容3\r\n \r\n内容被换行’
        },{
        content:’内容4′
        }]
    }
},
methods:{
    //复制按钮
    copyContent(text){
     this.copyText(text,(words) => {
        //复制成功后,弹出复制成功element-ui弹窗,提示:内容复制成功!
        this.SUCC_MSGBOX(‘内容’ + words + ‘!’)
      })
    },
    // 复制方法
    copyText(text, callback) {
      // text: 要复制的内容, callback: 回调 – 复制成功后的操作
      //以下创建标签,根据需求来选取
      var tag = document.createElement(‘textarea’) //textarea:标签会识别换行符,且后台返回换行符时不能转义 \r\n(Chrome浏览器返回↵ 字符,不是\r\n),如果换行符被转义,则会直接显示出来,无换行的功能了
      // var tag = document.createElement(‘input’) //input 复制出来的内容无法换行,即使有换行符 ↵ 或 \r\n
      tag.setAttribute(‘id’, ‘cp_hgz_input’)
      tag.value = text
      document.getElementsByTagName(‘body’)[0].appendChild(tag)
      document.getElementById(‘cp_hgz_input’).select()
      document.execCommand(‘copy’)
      document.getElementById(‘cp_hgz_input’).remove()
      if (callback) {
        callback(‘复制成功’)
      }
    },
}
 

页面如果不能换行显示,添加css样式:white-space: pre-wrap;

原文链接:https://blog.csdn.net/Shimeng_1989/article/details/105677595

    原文作者:spany-TR
    原文地址: https://blog.csdn.net/weixin_44052007/article/details/123568666
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞