首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以测量左对齐文本中的最大换行宽度?

是否可以测量左对齐文本中的最大换行宽度?
EN

Stack Overflow用户
提问于 2015-11-13 00:15:00
回答 3查看 142关注 0票数 3

是否可以测量左对齐文本中的实际换行宽度?

例如,说下面是左对齐。

标记为红色的宽度与元素宽度不一致,因为当单词不适合该行时,换行发生在随机位置。

可以测量一下这个宽度吗?

EN

回答 3

Stack Overflow用户

发布于 2015-11-13 00:29:29

这可能不是您想要的,因为它将修改您的标记,但我使用的技巧是将文本和每个单词包装在一个span中。然后,我查看每个span标记,并确定哪个是最右边的:

Demo

代码:

标记:

代码语言:javascript
运行
复制
<div class="test">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. </div>

<div class="results">
</div>

使用jQuery的JavaScript:

代码语言:javascript
运行
复制
var text  = $('div.test').text();
var words = text.split(' ');
var html  = '';

$.each(words, function(i, word) {
    html += '<span>' + word + '</span> ';
});

$('div.test').html(html);

var farthestRight = 0;
$('div.test span').each(function(i,e) {
    var left = $(e).position().left;
    var width = $(e).width();

    if (left + width > farthestRight) {
        farthestRight = left + width;
    }

    // Uncomment to see debug data
    // $('.results').append('<div>' + left + ', ' + width + ', ' + (left + width) + '</div>');
});

$('.results').append('<div>' + farthestRight + '</div>');
票数 1
EN

Stack Overflow用户

发布于 2015-11-13 00:58:01

您可以临时创建一个span并用文本填充它,一个单词接着一个单词,每次检查宽度是否实际增加。一旦它不再增加,就一定发生了换行,所以只需将之前的宽度与全宽进行比较。

完成后,重新插入原始数据。

代码语言:javascript
运行
复制
<div>This is a long text that wraps somewhere, but we don't know where exactly...
</div>
<h2 id="result"></h2>
代码语言:javascript
运行
复制
var text = $('div').text();
$('div').empty().append($('<span>'));
var words = text.split(' ');
var lastWidth = 0;
for (var word in words) {
    if (words[word] == '') continue;
    var newWidth = $('div span').append(words[word] + ' ').width();
    if (!(newWidth > lastWidth)) {
        $('#result').text($('div span').text(text).width()).append('px');
        break;
    }
    lastWidth = newWidth;
}
$('div').text(text);
票数 0
EN

Stack Overflow用户

发布于 2015-11-16 00:10:12

从文本节点创建Range并使用getBoundingClientRect()读取其尺寸时,可以查询文本宽度(以及更多)。

代码语言:javascript
运行
复制
function getTextRect( containerNode ) {
  // For simplicity, we assume plain text here
  // (no nested markup)
  var textRect,
      textNode = containerNode.childNodes[0],
      textRange = document.createRange();

  textRange.selectNode( textNode );
  textRect = textRange.getBoundingClientRect();

  // Clean up
  textRange.detach();

  return textRect;
}

// You can read the width with getTextRect( someNode ).width

您可以在this JSBin demo中看到它的实际效果。

这个方法在IE9+中得到了很好的支持(在IE8中不起作用);Chrome,FF,Opera已经support it for ages了。不过,MDN没有Safari的兼容性信息。所以我用iOS8、iOS9和桌面上的Safari9简单地检查了一下这个演示--效果很不错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33676115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档