<div class="ellipsis" style="width: auto; border: 1px solid silver; margin: 10px; padding: 5px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed urna id dui luctus tristique sit amet sit amet nisi.</div>
<div class="ellipsis multiline" style="width: 50%; height: 3em; border: 1px solid silver; margin: 10px; padding: 5px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed urna id dui luctus tristique sit amet sit amet nisi.</div>
<textarea class="ellipsis multiline" style="width: 50%; height: 5em; border: 1px solid silver; margin: 10px; padding: 5px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed urna id dui luctus tristique sit amet sit amet nisi. Mauris tortor elit, condimentum vel nisl hendrerit, maximus hendrerit enim. Nunc dapibus in libero vel suscipit. Suspendisse potenti. In eu lectus quis dui ornare egestas ut ac ligula. Etiam elementum quam hendrerit, posuere ligula sed, dignissim orci. Pellentesque nec magna tellus. Fusce faucibus rutrum mi, ac luctus tortor suscipit id. Praesent eget justo ut eros porta maximus id et erat. Aenean orci ex, ornare eget vulputate non, pulvinar non dolor. Nullam neque risus, tincidunt ac finibus pretium, aliquam at sem. Nullam elit ex, tempus sit amet consequat id, finibus in lectus.</textarea>
// The plugin
(function ($) {
'use strict';
$.fn.ellipsis = function (options) {
// Pass `false` to remove ellipsis and restore text
var truncate = options === false ? false : true;
if (truncate) { // If `true` (default)
// For each element in the set of matched elements…
return this.each(function () {
var $el = $(this),
isTextarea = $el.is('textarea'), // true/false: Is this a textarea?
storedText = $el.val() || $el.data('text'); // textarea value (if changed by user input) or stored data
if (storedText) { // If there is stored text…
$el.text(storedText); // …restore it. (temporarily)
if (isTextarea) { // textarea support
$el.val(storedText);
}
}
if ($el.css('overflow') === 'hidden') {
var ellip = '…', // Define an ellipsis character or string
targetHeight = $el.height(),
targetWidth = $el.width(),
multiline = $el.hasClass('multiline'),
text = $el.text(),
length = text.length,
// Create hidden clone
$clone = $(this.cloneNode(true))
.css({
visibility: "hidden",
position : "absolute"
})
.height(multiline ? 'auto' : targetHeight)
.width(multiline ? targetWidth : 'auto');
$el
.after($clone) // Append clone
.data('text', text); // Cache text
var exceedsHeight = function () {
// true/false: clone's unconstrained height exceeds target's?
return $clone.prop('scrollHeight') > targetHeight;
},
exceedsWidth = function () {
// true/false: clone's unconstrained width exceeds target's?
return $clone.prop('scrollWidth') > targetWidth;
},
...
Please Whitelist JSFiddle in your content blocker.
Help keep JSFiddle free for always by one of two ways:
Whitelist JSFiddle in your content blocker (two clicks)
Go PRO and get access to additional PRO features →
Join the 4+ million users, and keep the JSFiddle dream alive.
Ad-free
All ads in the editor and listing pages are turned completely off.
Use pre-released features
You get to try and use features (like the Palette Color Generator) months before everyone else.
Fiddle collections
Sort and categorize your Fiddles into multiple collections.
Private collections and fiddles
You can make as many Private Fiddles, and Private Collections as you wish!
Console
Debug your Fiddle with a minimal built-in JavaScript console.