是否可以测量左对齐文本中的实际换行宽度?
例如,说下面是左对齐。
标记为红色的宽度与元素宽度不一致,因为当单词不适合该行时,换行发生在随机位置。

可以测量一下这个宽度吗?
发布于 2015-11-13 00:29:29
这可能不是您想要的,因为它将修改您的标记,但我使用的技巧是将文本和每个单词包装在一个span中。然后,我查看每个span标记,并确定哪个是最右边的:
Demo
代码:
标记:
<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:
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>');发布于 2015-11-13 00:58:01
您可以临时创建一个span并用文本填充它,一个单词接着一个单词,每次检查宽度是否实际增加。一旦它不再增加,就一定发生了换行,所以只需将之前的宽度与全宽进行比较。
完成后,重新插入原始数据。
<div>This is a long text that wraps somewhere, but we don't know where exactly...
</div>
<h2 id="result"></h2>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);发布于 2015-11-16 00:10:12
从文本节点创建Range并使用getBoundingClientRect()读取其尺寸时,可以查询文本宽度(以及更多)。
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简单地检查了一下这个演示--效果很不错。
https://stackoverflow.com/questions/33676115
复制相似问题