例如,我想知道是否有一种方法可以计算 div 内的行数。假设我们有一个这样的 div:
<div id="content">hello how are you?</div>
根据许多因素,div 可以有一行、两行甚至四行文本。脚本有什么办法知道吗?
换句话说,自动中断是否在 DOM 中表示?
原文由 buti-oxa 发布,翻译遵循 CC BY-SA 4.0 许可协议
例如,我想知道是否有一种方法可以计算 div 内的行数。假设我们有一个这样的 div:
<div id="content">hello how are you?</div>
根据许多因素,div 可以有一行、两行甚至四行文本。脚本有什么办法知道吗?
换句话说,自动中断是否在 DOM 中表示?
原文由 buti-oxa 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果 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>
原文由 Pool 发布,翻译遵循 CC BY-SA 4.0 许可协议
8 回答4.6k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
5 回答1.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
我确信现在这是不可能的。不过,确实如此。
IE7 的 getClientRects 实现正是我想要的。在 IE8 中打开 此页面,尝试以不同的窗口宽度刷新它,并查看第一个元素中的行数如何相应变化。这是该页面中javascript的关键行:
不幸的是,Firefox 总是为每个元素返回一个客户端矩形,而 IE8 现在也是如此。 (Martin Honnen 的页面现在可以正常工作,因为 IE 在 IE 兼容视图中呈现它;在 IE8 中按 F12 可以使用不同的模式。)
这真是难过;这真是伤心。看起来 Firefox 对规范的字面但毫无价值的实现再次战胜了微软的实用规范。还是我错过了新的 getClientRects 可以帮助开发人员的情况?