代码之家  ›  专栏  ›  技术社区  ›  buti-oxa

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

  •  167
  • buti-oxa  · 技术社区  · 17 年前

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

    21 回复  |  直到 17 年前
        1
  •  1
  •   Sailist    4 年前

    如果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>
        2
  •  0
  •   Sailist    4 年前

    查看功能 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>

    虽然我不建议对这种风格进行硬编码。这只是为了举例。

        3
  •  0
  •   Tiago Maciel    3 年前