這是棘手的,但可以完成,即使沒有指定的行高或其他風格。它確實涉及一堆運動部件。
首先,建立一個「犧牲」容器<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/
+1。非常聰明。 – Yahel 2010-12-20 19:30:03
@yc - 我第二個意見。 – 2010-12-20 19:53:36
我知道這是一箇舊帖子,但謝謝。這對我目前的項目完全有幫助。另外,對於每個'$ calcdiv'和'$ measureDiv',我爲'font-size','font-family','font-weight'和'line-height'設置了原始div的'css'屬性道具。 – Scrimothy 2012-10-18 16:45:56