jQuery計算文本寬度的原理是利用html提供的<pre>標簽,向dom中動態添加<pre>標簽,標簽里的內容就是要測試長度的文本,獲取完長度之后再刪除剛才添加的<pre>標簽,從而可取到文本的大概長度了。為什么要用標簽而不用其他標簽呢,那來看看<pre>標簽的特性吧:pre 元素可定義預格式化的文本。被包圍在 pre 元素中的文本通常會保留空格和換行符;而文本也會呈現為等寬字體。 <pre>標簽的一個常見應用就是用來表示計算機的源代碼。需要注意的地方是,計算文本長度時文本里面最好不要有其他標簽。以下是實現代碼:
//獲取文本寬度
var textWidth = function ( text ){
var sensor = $ ( ' <pre> ' + text + ' </pre> ' ) . css ({ display : ' none ' }) ;
$ ( ' body ' ) . append ( sensor ) ;
var width = sensor . width () ;
sensor . remove () ;
return width ;
} ;
var textWidth = function ( text ){
var sensor = $ ( ' <pre> ' + text + ' </pre> ' ) . css ({ display : ' none ' }) ;
$ ( ' body ' ) . append ( sensor ) ;
var width = sensor . width () ;
sensor . remove () ;
return width ;
} ;
有了上面這個函數,input標簽根據輸入字符動態自適應寬度的實現就簡單了:
//input寬度自適應
$ ( " input " ) . unbind ( ' keydown ' ) . bind ( ' keydown ' , function (){
$ ( this ) . width ( textWidth ( $ ( this ) . val ())) ;
}) ;
$ ( " input " ) . unbind ( ' keydown ' ) . bind ( ' keydown ' , function (){
$ ( this ) . width ( textWidth ( $ ( this ) . val ())) ;
}) ;