如何计算 DOM 元素中的文本行数?我可以吗?
2022-08-30 02:44:46
例如,我想知道是否有一种方法可以计算div内的行数。假设我们有一个像这样的 div:
<div id="content">hello how are you?</div>
根据许多因素,div 可以有一行、两行甚至四行文本。脚本有没有办法知道?
换句话说,DOM 中是否表示自动中断?
例如,我想知道是否有一种方法可以计算div内的行数。假设我们有一个像这样的 div:
<div id="content">hello how are you?</div>
根据许多因素,div 可以有一行、两行甚至四行文本。脚本有没有办法知道?
换句话说,DOM 中是否表示自动中断?
如果div的大小取决于内容(我从您的描述中假设是这种情况),那么您可以使用以下命令检索div的高度:
var divHeight = document.getElementById('content').offsetHeight;
并除以字体行高:
document.getElementById('content').style.lineHeight;
或者,如果尚未显式设置行高,则获取行高:
var element = document.getElementById('content');
document.defaultView.getComputedStyle(element, null).getPropertyValue("lineHeight");
您还需要考虑填充和行间距。
编辑
完全独立的测试,明确设置行高:
function countLines() {
var el = document.getElementById('content');
var divHeight = el.offsetHeight
var lineHeight = parseInt(el.style.lineHeight);
var lines = divHeight / lineHeight;
alert("Lines: " + lines);
}
<body onload="countLines();">
<div id="content" style="width: 80px; line-height: 20px">
hello how are you? hello how are you? hello how are you? hello how are you?
</div>
</body>
查看函数 getClientRects(),它可用于计算元素中的行数。以下是如何使用它的示例。
var message_lines = $("#message_container")[0].getClientRects();
它返回一个 javascript DOM 对象。通过执行以下操作可以知道行数:
var amount_of_lines = message_lines.length;
需要注意的一点是,它仅在包含元素是内联元素时才有效,但是您可以使用块元素包围包含内联元素以控制宽度,如下所示:
console.log( message_container.getClientRects().length )
<div style="display:inline;" id="message_container">
..Text of the post..<br>
nice ha?
</div>
虽然我不建议像那样硬编码这种风格。这只是出于示例目的。