使用原生JavaScript统计文本行数的方法

作者:像素猫

时间:2026-10-31

浏览:551

本文介绍如何利用原生JavaScript结合window.getComputedStyle()方法,通过计算元素整体高度与行高的比值来统计文本行数。该方法无需依赖jQuery插件,适用于实现超出指定行数后显示“更多”按钮的交互需求,并提供完整代码示例供参考。

文章目录

前言

原生JS实现文本行数统计

在开发过程中,常需限制文本显示行数,例如仅展示两行,超出部分则显示“显示更多”按钮,点击后展开剩余内容。虽然存在如 loadingDots 这样的 jQuery 插件可解决此问题,但本文旨在探讨如何使用原生 JavaScript 实现相同功能。实现这一需求的核心在于准确计算容器内的文本行数,获取行数后,通过调整元素高度并判断是否显示加载按钮来完成交互。

获取计算样式

window.getComputedStyle()

若需使用原生 JavaScript 获取元素的各类样式属性,window.getComputedStyle() 是不可或缺的工具。该函数返回 HTML 元素在浏览器中实际渲染后的样式信息。需要注意的是,部分样式可能因浏览器安全策略或实现细节而被屏蔽,例如无法通过获取链接颜色来判断用户是否访问过该地址。

该方法返回的,是一个样式键值对,是 CSSStyleDeclaration 的实例。各属性索引名没有 - ,且采用驼峰命名法。比如 lineHeight 。

行数计算逻辑

行数 = 整体高度 / 行高

元素的整体高度可通过 height 属性获取。行高则可通过 lineHeight 获取,将获取到的行高值取整后,即可计算出文本行数。

然而存在一个问题:若未对元素显式设置 line-height 值,其默认值为 normal 。该值在桌面浏览器中通常约为 1.2,但具体数值受字体影响。因此,为确保计算准确,建议对需要统计行数的元素明确设置 line-height 值。

代码实现示例

以下是一个简单的实现示例:


function countLines(ele) {
 var styles = window.getComputedStyle(ele, null);
 var lh = parseInt(styles.lineHeight, 10);
 var h = parseInt(styles.height, 10);
 var lc = Math.round(h / lh);
 console.log('line count:', lc, 'line-height:', lh, 'height:', h);
 return lc;
}

完整代码示例


<!DOCTYPE html>
<html>
<head>
 <title>Line Count</title>
 <style type="text/css">
  p {
   line-height: 1.3em;
  }
 </style>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body>
<p id="target">She just made having a baby look lovely. Everything is white and she always has a fresh blueberry pie that's steaming and scones and clotted cream and she's reading The Old Man and the Sea and her little boy is rolly with bonnets. It's amazing, and I thought this is lovely. My kid is like playing with like explosive devices. I don't know where she's found them, like sticking them in our dog's ear. She already knows how to dry wall cause she puts holes in the wall.<br />
“今天的中国人一如当年的德国人,沉迷于‘崛起'幻觉,习惯于听信他人的吹捧,还想当然地认为只要中国继续保持经济增长,不仅未来的经济总量超越‘世界老大'美国可以期待,中国实现全面复兴也将是囊中之物。”上海外国语大学国际关系与公共事务学院教授程亚文在其新著《大国战略力》中尖锐地指出中国现下有不少人陷入了“盛世”幻觉,并没有意识到在经济总量的背后,中国其实还是一个极为落后的国家。世界上还没有一个大国是在风平浪静中兴起的,中国的新一轮文明复兴也将充满风险和曲折。防止国家崩溃、解体或衰败应该成为中国国家战略的重中之重。染上“软乎乎的幸福主义”只会让一个国家变得脆弱。
</p>
<p>行数:<span id="shower"></span></p>
改变窗口大小,自动计算
<button onclick="countLines()">立刻计算</button>

<script type="text/javascript">
var target = document.getElementById('target');
var shower = document.getElementById('shower');

function countLines(ele) {
 var styles = window.getComputedStyle(ele, null);
 var lh = parseInt(styles.lineHeight, 10);
 var h = parseInt(styles.height, 10);
 var lc = Math.round(h / lh);
 console.log('line count:', lc, 'line-height:', lh, 'height:', h);
 return lc;
}

function change() {
 shower.innerHTML = countLines(target);
}
window.onresize = change;
change();
</script>
</body>
</html>
[/html]

总结

以上就是本文的全部内容,希望本文的内容对大家使用Javascript能有所帮助。如果有疑问可以留言讨论。

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章