私はそれはそうと同じように、幅よりも大きくませんまで、テキストのその部分を縮小し、その後、入力としてテキスト文字列と幅を取るjQueryの機能を構築しました:このjQueryの「テキストの縮小」機能をより効率的にするにはどうすればよいですか?バイナリ検索で?
function constrain(text, ideal_width){
var temp = $('.temp_item');
temp.html(text);
var item_width = temp.width();
var ideal = parseInt(ideal_width);
var smaller_text = text;
var original = text.length;
while (item_width > ideal) {
smaller_text = smaller_text.substr(0, (smaller_text.length-1));
temp.html(smaller_text);
item_width = temp.width();
}
var final_length = smaller_text.length;
if (final_length != original) {
return (smaller_text + '…');
} else {
return text;
}
}
これは正常に動作しますが、私ので、 Safari 4とChromeを除くすべてのブラウザで、多くのテキストに関数を呼び出すと、それは本当に遅いです。
私は、これは、より効率的にするために二分探索法を使用してみましたが、私はこれまでのところ、私のブラウザで遅いスクリプトのダイアログが表示されますしている:
function constrain(text, ideal_width){
var temp = $('.temp_item');
temp.html(text);
var item_width = temp.width();
var ideal = parseInt(ideal_width);
var lower = 0;
var original = text.length;
var higher = text.length;
while (item_width != ideal) {
var mid = parseInt((lower + higher)/2);
var smaller_text = text.substr(0, mid);
temp.html(smaller_text);
item_width = temp.width();
if (item_width > ideal) {
// make smaller to the mean of "lower" and this
higher = mid - 1;
} else {
// make larger to the mean of "higher" and this
lower = mid + 1;
}
}
var final_length = smaller_text.length;
if (final_length != original) {
return (smaller_text + '…');
} else {
return text;
}
}
すると、誰もが何を私のアイデアを持っていますこの機能をできるだけ効率的にするにはどうすればよいでしょうか?
ありがとうございます! Simon
:
は、その後のjQueryを使用して、私は.engloberに合わせて.TITLEからテキストのサイズを変更しますか? overflow:hiddenで固定幅のブロックにテキストを配置する方が簡単になると思います。 – Joel
@Joelこれをやりたい理由は、オーバーフローするテキストに省略記号(...)が付いているためです。 – Simon