二分法による切り取り文字列長の取得
4278 ワード
質問:固定幅のコンテナで、文字列の長さがコンテナの幅より大きい場合、省略記号が後に出ます.
これはJSまで使えますか?CSSを使えばいいのに、white-space:nowrap;text-overflow: ellipsis;overflow:hidden .ええ、そうです.しかし、問題はこれよりも責任がある場合があります.例えば、文字の後ろにアイコンが必要です.文字列の長さが長すぎると、文字には省略符が必要ですが、アイコンも表示されます.そんな時は仕方ないので、JSを使って文字列の切り捨てをする必要があります.
次に、必要な文字列の切り取りを二分法で実現し、より簡潔な方法でコミュニケーションしたいと考えています.
これで必要な文字列の長さが得られるので、仲間たちに役に立ちたいです~
これはJSまで使えますか?CSSを使えばいいのに、white-space:nowrap;text-overflow: ellipsis;overflow:hidden .ええ、そうです.しかし、問題はこれよりも責任がある場合があります.例えば、文字の後ろにアイコンが必要です.文字列の長さが長すぎると、文字には省略符が必要ですが、アイコンも表示されます.そんな時は仕方ないので、JSを使って文字列の切り捨てをする必要があります.
次に、必要な文字列の切り取りを二分法で実現し、より簡潔な方法でコミュニケーションしたいと考えています.
/**
** span ,el span dom , span , span ,
**/
var con = 100;// 100
function(str){
var _w = el.html(str).width(),
_l = str.length;
if(_w <= con){// ,
return str;
}
/** **/
var _r = _l;
// , ,
var addR = function(){
while(_w < a){
_r = parseInt(_r/2,10);
if(_r == 1){
break;
}
_l = _l + _r;
var b = str.substr(0, _l);
_w = el.html(b + '...').width();
}
};
// , ,
var reduR = function(){
while(_w > a){
_r = parseInt(_r/2,10);
if(_r == 1){
break;
}
_l = _l - _r;
var b = str.substr(0, _l);
_w = el.html(b + '...').width();
}
};
while(_r > 1){
reduR();
addR();
}
//
if(_w > a){
b = str.substr(0, _l - 1);
}else{
b = str.substr(0, _l + 1);
}
/** **/
return (b+'...');
}
これで必要な文字列の長さが得られるので、仲間たちに役に立ちたいです~