css3属性识别文本框行数并处理

需求:当表格单元格内容超过4行时,隐藏多余部分并显示展开按钮。不超过4行的,正常显示且不显示展开按钮。
背景:使用dva相关技术栈 + jquery + css3 + antD
分析
刚接到这个需求的时候,由于对css3属性了解的不够透彻,并未直接想到使用css3的webkit-line-clamp属性。最开始想的是由于单元格宽度不固定,且中文、英文、数字和符号等宽度不同,也无法使用string.length()来判断何时会换行。
之后想可以使用jq,获取确定4行时单元格高度,当内容高度超过4行高度时,给单元格中div设置属性隐藏,处理4行末尾显示…,添加展开按钮。但没想到该如何判断4行时显示到了字符串哪个位置。(还有一个问题是,使用antD的Table组件,有loading属性,只有当内容已经渲染到页面后才会获得单元格高度,此时不能将loading设为false,需要再将单元格内容删减处理后才可以更改loading,否则可能会先呈现全部内容,再显示处理后内容的情况,体验不好。)
后来查资料,发现在css3的webkit-line-clamp,(具体方法可以自行百度),会自行处理文本显示情况,只需要在添加按钮。单元格中一个整体div,div中两个子div,一个是divContent,一个是divButton,将divContent添加class

{
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 4;
    max-height: 70px;
  }

jq方法通过类名获取所有divContent,循环得到高度,判断是否添加Button。
点击Button时只需要将此单元格的类移除或重新添加即可。
备注
1.将jq方法放在了componentDidUpdate生命周期中。
2.切记给Table组件设置rowKey属性,标识每条数据的唯一性,当数据变化时,由于没有唯一标识,react的机制会认为有些行的数据并未更新,导致jq方法未执行,出现显示错误。
3.通过jq类选择器得到的数组,使用map循环无法得到预期效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值