Jest to trudne, ale można to zrobić, nawet jeśli nie ma określonej wysokości linii lub innego stylu. Zawiera sporo ruchomych części.
Najpierw zbuduj kontener "ofiarny" <div>
. Wypełnić go z określonej liczbie wierszy tekstu, jeden znak każdego, i umieścić go daleko poza ekranem:
// 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
Teraz znamy przybliżoną wysokość wiersza, w pikselach, wydanego przez tę przeglądarkę. Zwracamy uwagę na pola, aby mierzyć:
$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
... a teraz znamy przybliżoną liczbę wierszy w oknie jeśli jest to dozwolone, aby osiągnąć swoje naturalne wymiary jak renderowane przez przeglądarkę:
var numLines = $measureDiv.height()/lineHeight;
Musimy clone()
, ponieważ oryginalne pole, które ma zostać zmierzone, może mieć ograniczoną wysokość przez bieżące style i układ strony.
Teraz niektóre porządki:
$calcdiv.remove();
$measureDiv.remove();
Oto przykład: http://jsfiddle.net/redler/FuWue/
+1. Bardzo mądry. – Yahel
@yc - Tę opinię przedłużam. –
Wiem, że to stary post, ale dzięki. To całkowicie pomogło mi w bieżącym projekcie. Ponadto dla każdego '$ calcdiv' oraz' $ measureDiv', dodałem właściwości 'css' dla' font-size', 'font-family',' font-weight' oraz 'line-height' ustawione na oryginalny div. rekwizyty. – Scrimothy