JSFiddle - React, Tailwind, and code Playground
HTML
<div>123456789</div>
<div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vel orci quis nunc vulputate tristique quis id tortor. Donec dui ante, condimentum quis iaculis ut, venenatis vel lorem. Etiam ullamcorper aliquam imperdiet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis tincidunt ligula lorem. Pellentesque pharetra ipsum nec erat tempor vel sagittis libero volutpat. Donec malesuada convallis pharetra.
</div>
<div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vel orci quis nunc vulputate tristique quis id tortor. Donec dui ante, condimentum quis iaculis ut, venenatis vel lorem. Etiam ullamcorper aliquam imperdiet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis tincidunt ligula lorem. Cras at tortor leo. Donec nisl nisl, volutpat non pulvinar sit amet, tempus id ipsum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla facilisi. Integer leo justo, convallis iaculis laoreet placerat, hendrerit nec libero. Nunc tortor purus, mollis non mattis sit amet, cursus a orci. Donec luctus lobortis justo. Donec ornare, lectus vel vestibulum sodales, nunc diam tempus nulla, et dapibus ligula nunc id urna. Cras commodo enim a enim ultricies viverra. Pellentesque pharetra ipsum nec erat tempor vel sagittis libero volutpat. Donec malesuada convallis pharetra.
</div>
<div>
Cras at tortor leo. Donec nisl nisl, volutpat non pulvinar sit amet, tempus id ipsum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla facilisi. Integer leo justo, convallis iaculis laoreet placerat, hendrerit nec libero. Nunc tortor purus, mollis non mattis sit amet, cursus a orci. Donec luctus lobortis justo. Donec ornare, lectus vel vestibulum sodales, nunc diam tempus nulla, et dapibus ligula nunc id urna. Cras commodo enim a enim ultricies viverra. Pellentesque...
CSS
body {font-family:arial;font-size:12px;}
/* div and test div must use same formatting (font-size, font-family, etc) */
div {width:300px;border:1px solid red}
.excision-test {position:absolute;left:-10000em;width:auto;}
JavaScript
// Text excision for generating middle ellipsis values to fit a specific size.
String.prototype.cutMiddleChar = function() {
var charPosition = Math.floor(this.length / 2)
return this.substr(0, charPosition) + this.substr(charPosition + 1);
};
String.prototype.insertMiddleEllipsis = function() {
var charPosition = Math.floor(this.length / 2)
return this.substr(0, charPosition) + '...' + this.substr(charPosition);
};
var w = 0,
t = '',
$test = $('.excision-test');
$('div').each(function() {
// re-usable $this
var $this = $(this);
// get current width, this is the width we need to fit the value to
w = $this.width();
// get current text value, we'll be manipulating this till it's sized right
t = $this.text();
// set our test div to the value (plus our ellipsis) for sizing
$test.text(t + '...');
//console.log(w);
//console.log($test.width());
// when the value's width is greater than the width of the container loop through to size it down
if ($test.width() > w) {
while ($test.width() > w) {
t = t.cutMiddleChar()
//console.log('str cut: ' + t);
$test.text(t + '...');
//console.log('str len: ' + t.length);
//console.log('width: ' + $test.width());
}
$this.text(t.insertMiddleEllipsis());
}
});