这很棘手,但可以做到,即使没有指定行高或其他样式。它确实涉及到一堆活动部件。
首先,构建一个“牺牲”容器<div>。用已知数量的文本填充它,每行一个字符,并将其放置在远离屏幕的位置:
// calculate height per line
$calcdiv = $('<div/>').css({
width: '50px',
position: 'absolute', // don't affect layout
left: '-2000px' // position far off=screen
}).html('A<br />B<br />C<br />D<br />E'); // add five lines
$('body').append( $calcdiv ); // make the browser render it
var lineHeight = $calcdiv.height()/5; // average height per line
现在我们知道了此浏览器呈现的线条的大致高度(以像素为单位)。我们将注意力转向要测量的框:
$origDiv = $('div#div_to_measure');
$measureDiv = $origDiv.clone(); // clone it
$measureDiv.css({
position: 'absolute',
left: '-1000px', // position far off-screen
height: 'auto' // let it grow to its natural full height
});
$('body').append( $measurediv ); // add it to the DOM, browser will render it
...现在我们知道如果允许达到浏览器呈现的自然尺寸,框内的大致行数:
var numLines = $measureDiv.height() / lineHeight;
我们必须clone(),因为要测量的原始框的高度可能会受到当前页面样式和布局的限制。
现在进行一些清理:
$calcdiv.remove();
$measureDiv.remove();
这是一个例子:http://jsfiddle.net/redler/FuWue/