• 开发中遇到的两种表格文本长度处理,即长文本截断


    一、固定列宽,文本过长用省略号‘...’显示

    方案:使用css实现(本例在angular环境)

    :host ::ng-deep {
      .ant-table-small
        > .ant-table-content
        > .ant-table-body
        > table
        > .ant-table-tbody
        > tr
        > td {
        max-width: 100px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }
    }

    注意:如果表格行使用了nzWidth属性,则css需要设置最大宽度(实际上页面宽度会以nzWidth为准),否则html宽度无效。

    二、根据字数长度截取:使用了angular的管道实现

    import { Pipe, PipeTransform } from '@angular/core';
    
    @Pipe({
      name: 'stringCutOff'
    })
    export class StringCutOffPipe implements PipeTransform {
    
      transform(value: any, args?: any): any {
        let newStr = value;
        //默认字符串长度
        let defaultLength = 12;
        //计算字符长度
        let strEnLen = 0;
        let strCnLen = 0;
        //设置字符串截取长度,如果没有传参,就给默认长度defaultLength,用户输入参数按照中文字符计算,即2个字符。
        //截取长度转换成字符
        let strLength = args ? args * 2 : defaultLength * 2;
        let cutIndex = 0;
        for (let i = 0; i < value.length; i++) {
          if (value.charCodeAt(i) <= 255) { //如果是汉字,则字符串长度加2
            strEnLen++;
          } else {
            strCnLen += 2
          }
          //一个一个字符循环判断当前长度是否达到了截取长度,然后计算这段字符串中,中文字符和其他字符的数量
          if ((strEnLen + strCnLen) >= strLength) {
            cutIndex = i;
            break;
          }
        }
        if (value && strEnLen + strCnLen >= strLength) {
          newStr = value.substring(0, cutIndex) + '...'
        };
        return newStr;
      }
    
    }
    <td [title]="data.NAME" >{{data.NAME|stringCutOff:15}}</td>

    注意:

    (1)管道设置了默认截取长度和自定义长度。

    (2)英文字符在这里设为半个长度,因为考虑到设置字符长度的常规思维是以汉字为参考的。而英文、符号等字体宽度差不多是半个汉字,所以为了使相同截取数量的纯汉字和中英文混合字段表现相同宽度,把字符设为半个长度处理。

    (3)html中使用时,一定要加上title,不然无法查看被截取文本的完整信息。

  • 相关阅读:
    msyql多个or,and,
    mysql中 where in 用法详解
    history.back(-1)和history.go(-1)的区别
    经典 mysql 28道题
    企业案例(二):增量恢复案例
    企业案例(一):由于mysql sleep线程过多小故障
    mysql数据库恢复
    binlog介绍
    mysql 数据库备份
    docker入门与实践
  • 原文地址:https://www.cnblogs.com/gouzei/p/12837961.html
Copyright © 2020-2023  润新知