js获取textarea每一行的内容,自动换行算新的一行

js获取textarea每一行的内容,自动换行算新的一行

原本想要抄一个,发现找不到。。。。。。。。。。。。。。。。
然后自己手写一个

主要思路

获取textarea的宽度和字体大小,计算出来一行最多能放多少个字符。(跟字体有关,不同字体的宽度不一行)
然后获取textarea内容的字符串,遍历字符串的单个字节,如果是中文获取全角字符则为2的长度,英文为一个字符。根据当前字节以及后续字节,判断是否需要加入换行符。
word-break: ‘break-all’ 这个一定一加,不然会出现输入中文,后面全是英文,会自动换行情况

主要代码

<template>
  <div >
  <!--    wordBreak必须要加,不然会出现中文后面接的英文提前换行-->
    <el-input
        type="textarea"
        placeholder="请输入内容"
        v-model="textarea"
        show-word-limit
        :autosize="{ minRows: 1}"
        :style="{fontFamily: '黑体',width:200+'px',fontSize:14+'px', whiteSpace: 'pre-wrap',wordBreak: 'break-all'}">
      ></el-input>

    <el-button @click="click()" >截取</el-button>

  </div>
</template>

<script>

export default {
  name: "test",
  data() {
    return {
      textarea: ''
    }
  },


  methods: {
    click(){
      let sourceValue = this.textarea
      let maxLength = 24 //可以通过with/font-size大概计算
      this.t(sourceValue,maxLength)
    },

    t(val,maxLength = 24){
      let newStr = ''
      let valLength = val.length;
      let innerVal,nextVal;
      let countLen = 0
      let nextLen = 1
      for(let i = 0; i < valLength; i++) {
        innerVal = val.charAt(i);
        nextVal = i===valLength ? '' : val.charAt(i+1)
        if(innerVal.indexOf("\n")> -1 || innerVal.indexOf("\r\n") > -1 ){
          newStr += '\n'
          countLen = 0
          continue
        }
        if (innerVal.match(/[^\x00-\xff]/ig) != null){//中文,或者全角符号
          countLen += 2
        }else {
          countLen += 1
        }
        if (nextVal.match(/[^\x00-\xff]/ig) != null){//中文,或者全角符号
          nextLen =2
        }else {
          nextLen = 1
        }

        if (countLen > maxLength || countLen === maxLength){
          newStr += innerVal
          newStr += '\n'
          countLen = 0
        }else if (countLen + nextLen === maxLength){
          newStr += innerVal
        }else if (countLen + nextLen > maxLength){
          newStr += innerVal
          newStr += '\n'
          countLen = 0
        }else {
          newStr += innerVal
        }
      }

      console.log(newStr.split('\n'))

    }
  },
}
</script>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值