Skip to content

Instantly share code, notes, and snippets.

@arufian
Last active August 29, 2015 14:08
Show Gist options
  • Save arufian/cf773069d7f9ecd0b33a to your computer and use it in GitHub Desktop.
Save arufian/cf773069d7f9ecd0b33a to your computer and use it in GitHub Desktop.
To make a new line (<br />) on the text every 10 chars
function binSearch(text, searchLen) {
var left = 0, right = text.length;
var breakPos = left, lastBreakPos = right;
while (Math.abs(lastBreakPos - breakPos) > 1) {
lastBreakPos = breakPos;
breakPos = Math.floor((left+right)/2);
if (searchLen < getTextWidth(text.substring(0, breakPos)))
right = breakPos - 1;
else
left = breakPos + 1;
}
return Math.min(breakPos, lastBreakPos);
}
function getTextWidth(text) {
var ea = document.createElement("span");
ea.innerHTML = text;
document.body.appendChild(ea);
var len = ea.offsetWidth;
document.body.removeChild(ea);
return len;
}
function linebreak(text, maxLen) {
var breakPos = 0;
var out = "";
var part1 = text, part2 = "";
if (getTextWidth(part1) > maxLen) {
while (getTextWidth(part1) > maxLen) {
var breakPos = binSearch(part1, maxLen);
part2 = part1.substring(breakPos, part1.length);
part1 = part1.substring(0, breakPos);
out += part1 + "<br/>";
part1 = part2;
}
return out + part2;
}
else
return text;
}
// excample:
linebreak(el.innerHTML, 150);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment