Nur eine kurze Grundidee.
Ich habe mit folgendem Markup getestet:
<div id="fos">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin nisi ligula, dapibus a volutpat sit amet, mattis et dui. Nunc porttitor accumsan orci id luctus. Phasellus ipsum metus, tincidunt non rhoncus id, dictum a lectus. Nam sed ipsum a lacus sodales eleifend. Vestibulum lorem felis, rhoncus elementum vestibulum eget, dictum ut velit. Nullam venenatis, elit in suscipit imperdiet, orci purus posuere mauris, quis adipiscing ipsum urna ac quam.</p>
</div>
Und CSS:
#fos { width: 300px; height: 190px; overflow: hidden; }
#fos p { padding: 10px; margin: 0; }
Durch Anwenden dieser jQuery wird das gewünschte Ergebnis erzielt:
var $p = $('#fos p');
var divh = $('#fos').height();
while ($p.outerHeight() > divh) {
$p.text(function (index, text) {
return text.replace(/\W*\s(\S)*$/, '...');
});
}
Es wird wiederholt versucht, das letzte Wort des Textes zu entfernen, bis die gewünschte Größe erreicht ist. Wegen des Überlaufs: versteckt; Der Prozess bleibt unsichtbar und auch bei ausgeschaltetem JS bleibt das Ergebnis "visuell korrekt" (natürlich ohne das "...").
Wenn Sie dies mit einer sinnvollen Kürzung auf der Serverseite kombinieren (die nur einen geringen Overhead hinterlässt), wird es schneller ausgeführt :).
Auch dies ist keine vollständige Lösung, sondern nur eine Idee.
UPDATE: Eine jsFiddle-Demo wurde hinzugefügt .