JavaScript 计算文本行数并控制展开收起的实现方案

作者:流萤

时间:2026-10-23

浏览:481

本文介绍在JavaScript中通过克隆DOM节点并移除高度限制来准确计算文本行数的方法。利用总高度除以行高得出结果,进而判断是否显示展开与收起按钮。该方案解决了直接获取受限高度导致的计算误差问题,适用于需要根据内容长度动态调整UI展示的前端场景。

文章目录

需求背景与核心思路

业务需求:依据文本内容的行数,动态决定是否显示展开与收起的操作选项。

需求背景与核心思路

核心思路:利用两个DOM块分别处理显示与统计。其中一个块隐藏且不设高度限制,用于精确统计行数;另一个块应用高度限制以控制实际显示效果(若直接对显示块设限,会导致行数统计不准确)。

计算原理与实施步骤

计算原理:获取文本的总高度与单行高度,两者相除即可得到行数。关键在于总高度的计算必须基于未受高度限制的DOM元素,使其随文本增加自然增高。同时需考虑CSS样式中padding和margin对高度计算的影响。具体实施步骤如下:

  • 第一步,克隆包含文本的原始DOM节点;
  • 第二步,移除克隆节点的高度限制属性;
  • 第三步,获取该克隆节点的行高与总高度数据;
  • 第四步,通过总高度除以行高计算出具体的行数;
  • 第五步,计算完成后移除克隆的DOM节点,保持页面整洁。

相关代码实现如下:

代码实现细节


 document.getElementById("noticeContent").innerText = str;//展示的块

 document.getElementById("noticeContent2").innerText = str;//计算行高的块

 

 this.$nextTick(() => {

 let noticeDom = document.getElementById("noticeContent2");

 console.log(noticeDom);

 let style = window.getComputedStyle(noticeDom, null);

 let row = Math.ceil(

 Number(style.height.replace("px", "")) /

 Number(style.lineHeight.replace("px", ""))

 );//总行高 / 每行行高

 console.log("noticeDom===>", style.height, style.lineHeight);

 console.log("rowwwww", row);

 if (row > 2) {//超过2行则显示展开和收起

 this.showOmit = true;

 this.showOpen = true;

 } else {

 this.showOpen = false;

 }

 });

以上就是利用JavaScript计算文本行数并控制展开收起功能的详细介绍。更多关于JavaScript处理文本行数的技巧,欢迎查阅本站过往文章或继续阅读后续内容,感谢大家的支持!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章