Chỉ là một ý tưởng cơ bản nhanh chóng.
Tôi đã thử nghiệm với đánh dấu sau:
<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>
Và CSS:
#fos { width: 300px; height: 190px; overflow: hidden; }
#fos p { padding: 10px; margin: 0; }
Áp dụng jQuery này sẽ đạt được kết quả mong muốn:
var $p = $('#fos p');
var divh = $('#fos').height();
while ($p.outerHeight() > divh) {
$p.text(function (index, text) {
return text.replace(/\W*\s(\S)*$/, '...');
});
}
Nó liên tục cố gắng loại bỏ từ cuối cùng của văn bản cho đến khi đạt đến kích thước mong muốn. Vì tràn: ẩn; quá trình này vẫn vô hình và ngay cả khi tắt JS, kết quả vẫn là "chính xác trực quan" (tất nhiên không có "...").
Nếu bạn kết hợp điều này với một cắt ngắn hợp lý ở phía máy chủ (chỉ để lại một chi phí nhỏ) thì nó sẽ chạy nhanh hơn :).
Một lần nữa, đây không phải là một giải pháp hoàn chỉnh, chỉ là một ý tưởng.
CẬP NHẬT: Đã thêm bản demo jsFiddle .