Truncate Text with JavaScript Automatically
This article describes what I think is a clever way of automatically truncating the text of a paragraph:
- Truncate the text to a length of your choosing
- Do not truncate in the middle of a word (only on a word boundary)
- Keep the page search-engine friendly by publishing the complete non-truncated text
- Add an ellipsis to the end of the truncated text
- Make the ellipsis a link that expands the text to full length. Once expanded it cannot be collapsed again (but that functionality could be added just as easily)
- Assumes that the content is plain text with no markup.
Example
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean consectetuer. Etiam venenatis. Sed ultricies, pede sit amet aliquet lobortis, nisi ante sagittis sapien, in rhoncus lectus mauris quis massa. Integer porttitor, mi sit amet viverra faucibus, urna libero viverra nibh, sed dictum nisi mi et diam. Nulla nunc eros, convallis sed, varius ac, commodo et, magna. Proin vel risus. Vestibulum eu urna. Maecenas lobortis, pede ac dictum pulvinar, nibh ante vestibulum tortor, eget fermentum urna ipsum ac neque. Nam urna nulla, mollis blandit, pretium id, tristique vitae, neque. Etiam id tellus. Sed pharetra enim non nisl.
ToDo / Commentary
I quickly ripped this code out of another project, so it's not integrated into the page very well. You could use Behavior.js to run the code on all the paragraphs that match a class name or some other CSS selector.
This asumes that the content is plain text with no markup - if the paragraph contains markup you would have to ensure that you did not truncate at the wrong spot, which doesn't seem particularly easy.
The Code
<p id="truncateMe">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean consectetuer. Etiam venenatis. Sed ultricies, pede sit amet aliquet lobortis, nisi ante sagittis sapien, in rhoncus lectus mauris quis massa. Integer porttitor, mi sit amet viverra faucibus, urna libero viverra nibh, sed dictum nisi mi et diam. Nulla nunc eros, convallis sed, varius ac, commodo et, magna. Proin vel risus. Vestibulum eu urna. Maecenas lobortis, pede ac dictum pulvinar, nibh ante vestibulum tortor, eget fermentum urna ipsum ac neque. Nam urna nulla, mollis blandit, pretium id, tristique vitae, neque. Etiam id tellus. Sed pharetra enim non nisl.</p> <script type="text/javascript"> var len = 100; var p = document.getElementById('truncateMe'); if (p) { var trunc = p.innerHTML; if (trunc.length > len) { /* Truncate the content of the P, then go back to the end of the previous word to ensure that we don't truncate in the middle of a word */ trunc = trunc.substring(0, len); trunc = trunc.replace(/\w+$/, ''); /* Add an ellipses to the end and make it a link that expands the paragraph back to its original size */ trunc += '<a href="#" ' + 'onclick="this.parentNode.innerHTML=' + 'unescape(\''+escape(p.innerHTML)+'\');return false;">' + '...<\/a>'; p.innerHTML = trunc; } } </script>