Voici ma solution (en utilisant jQuery).
Markup:
<div class="text">This is shown. This is hidden</div>
CSS:
.text{
outline:1px solid orange;
width:200px;
height:20px;
overflow:hidden;
}
(Seul le débordement. Caché importe réellement, le code fonctionne toujours avec des valeurs différentes pour la hauteur et la largeur)
JS:
$('.text').wrapInner('<div/>');
var originaltext = $('.text div').text();
var t = $('.text div').text();
while(true)
{
if ($('.text div').height() <= $('.text').height()) { break; }
$('.text div').text(t.substring(0, t.lastIndexOf(" ")));
t = $('.text div').text();
}
$('.text div').text(originaltext);
alert("shown: " + originaltext.substring(0, t.length));
alert("hidden: " + originaltext.substring(t.length));
Voici ce qu'il fait:
Nous sauvegardons le texte original dans une variable afin que nous puissions restaurer plus tard. Nous supprimons ensuite un mot à la fois, jusqu'à ce que la div interne ait diminué à la même hauteur que le conteneur (avec débordement caché). Tout ce qui était encore dans la div était visible et tout ce que nous devions enlever était caché.
Limites
Ma solution suppose que la div ne contient que du texte. Il fonctionnera principalement avec des éléments en ligne comme des travées, mais les enlève actuellement pendant le processus. Il pourrait facilement être réparé pour préserver les portées, mais il est beaucoup plus difficile de faire face à des images ou à d'autres complications comme des éléments positionnés.
@ gms8994 désolé pour cette faute de frappe! merci pour l'édition !! – Trufa
Est-ce toujours un texte simple et sans style? L'élément avec 'overflow: hidden' ** always ** aura-t-il un 'width' et un' height'? En d'autres termes, comment votre exemple est-il artificiel? – thirtydot
@thirtydot Eh bien c'est en fait une bonne question! Je ne sais pas comment répondre, puisque j'en aurais besoin tout de suite pour du texte sans style avec une hauteur et une largeur fixes, mais trouverais une réponse très intéressante qui couvre aussi d'autres situations, sans que la question soit si ouverte qu'elle soit pas possible de répondre. Est-ce que je me suis expliqué? – Trufa