ここのこの章には、javascript を使用し、JQuery を使用しないソリューションがあります。
jsfiddle で実行: http://jsfiddle.net/ZfDYG/
編集 - 2 行のテキストについて少し読んでください: http://jsfiddle.net/ZfDYG/8/
コード (完全を期すため):
String.prototype.visualLength = function() {
var ruler = $("ruler");
ruler.innerHTML = this;
return ruler.offsetWidth;
}
function $(id) {
return document.getElementById(id);
}
var s = "Some text that is quite long and probably too long to fit in the box";
var len = s.visualLength();
String.prototype.trimToPx = function(length,postfix) {
postfix = postfix || '';
var tmp = this;
var trimmed = this;
if (tmp.visualLength() > length) {
trimmed += postfix;
while (trimmed.visualLength() > length) {
tmp = tmp.substring(0, tmp.length-1);
trimmed = tmp + postfix;
}
}
return trimmed;
}
String.prototype.wrapToLength = function(complete) {
if(complete[this.length] == ' ' || complete[this.length - 1] == ' ') return;
var wrapped = this;
var found = false;
for(var i = this.length-1; i > 0 && !found; i--) {
if(this[i] == ' ') {
wrapped = this.substring(0, i);
found = true;
}
}
return wrapped;
}
var firstLine = s.trimToPx(240).wrapToLength(s);
var secondLine = s.substring(firstLine.length, s.length);
$('output').innerHTML= firstLine+' '+secondLine.trimToPx(240,'...');
HTML:
<span id="ruler"></span>
<div id="output"></div>
CSS:
#ruler { visibility: hidden; white-space: nowrap; }
#output {
width: 240px;
height: 50px;
border: 1px solid red;
}
あなたのボックスでそれでも遅すぎる場合は、ゆっくりとインクリメントするのではなく、最終的な長さに向かって振動する (バネのようなもの) より大きな追加から開始することで、while ループを高速化できるはずです。