如何计算 DOM 元素内的文本行数?我可以吗?

新手上路,请多包涵

例如,我想知道是否有一种方法可以计算 div 内的行数。假设我们有一个这样的 div:

 <div id="content">hello how are you?</div>

根据许多因素,div 可以有一行、两行甚至四行文本。脚本有什么办法知道吗?

换句话说,自动中断是否在 DOM 中表示?

原文由 buti-oxa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

我确信现在这是不可能的。不过,确实如此。

IE7 的 getClientRects 实现正是我想要的。在 IE8 中打开 此页面,尝试以不同的窗口宽度刷新它,并查看第一个元素中的行数如何相应变化。这是该页面中javascript的关键行:

 var rects = elementList[i].getClientRects();
var p = document.createElement('p');
p.appendChild(document.createTextNode('\'' + elementList[i].tagName + '\' element has ' + rects.length + ' line(s).'));

不幸的是,Firefox 总是为每个元素返回一个客户端矩形,而 IE8 现在也是如此。 (Martin Honnen 的页面现在可以正常工作,因为 IE 在 IE 兼容视图中呈现它;在 IE8 中按 F12 可以使用不同的模式。)

这真是难过;这真是伤心。看起来 Firefox 对规范的字面但毫无价值的实现再次战胜了微软的实用规范。还是我错过了新的 getClientRects 可以帮助开发人员的情况?

原文由 buti-oxa 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏