二分法による切り取り文字列長の取得


質問:固定幅のコンテナで、文字列の長さがコンテナの幅より大きい場合、省略記号が後に出ます.
これは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+'...'); }

これで必要な文字列の長さが得られるので、仲間たちに役に立ちたいです~