js TextArea的選中區(qū)域處理
更新時間:2010年12月28日 23:30:40 作者:
js中對于TextArea的選中區(qū)域后進(jìn)行處理的代碼,需要的朋友可以參考下。
(一)獲取Textarea的選中區(qū)域起點(diǎn)或無選中時的輸入光標(biāo)位置
非IE瀏覽器,如,firefox,chrome,支持 selectionStart 獲取選中區(qū)域的起點(diǎn),而IE瀏覽器不支持該屬性,需要間接通過TextRange來獲得,利用TextRange對象的compareEndPoints方法來進(jìn)行起點(diǎn)的比較可以實(shí)現(xiàn)。
getStartPos : function( textarea )
{
if ( typeof textarea.selectionStart != 'undefined' )
{ // 非IE
start = textarea.selectionStart;
}
else
{ // IE
var range = document.selection.createRange();
var range_textarea = document.body.createTextRange();
range_textarea .moveToElementText(textarea);
//比較start point
for ( var sel_start = 0; range_textarea .compareEndPoints('StartToStart' , range) < 0; sel_start++)
range_textarea .moveStart( 'character', 1);
start = sel_start;
} // else
return start;
}
但有點(diǎn)需要注意的是,在chrome下,如果textarea設(shè)為readonley,那textarea不會出現(xiàn)輸入光標(biāo),返回的selectionStart與selectionEnd都為0.firefox下則正常。
(二)設(shè)置Textarea中選中的區(qū)域
類似的,非IE的瀏覽器支持setSelectionRange方法指定選中的字符范圍,而IE不支持,也是通過TextRange來操作,這里需要注意的是IE下Textarea的選中區(qū)間的相對位置問題。如下面的代碼是先moveStart,moveEnd把起點(diǎn)與終點(diǎn)都設(shè)為0,collapse移動生效后,起點(diǎn)不變,先moveEnd移動區(qū)間的終點(diǎn),再moveStart移動區(qū)間的起點(diǎn),在沒有改變起點(diǎn)point之前,可以保證相對位置不變,更容易理解些。
/**
* 設(shè)置textarea的選中區(qū)域
*/
setSelectRange : function( textarea, start, end )
{
if ( typeof textarea.createTextRange != 'undefined' )// IE
{
var range = textarea.createTextRange();
// 先把相對起點(diǎn)移動到0處
range.moveStart( "character", 0)
range.moveEnd( "character", 0);
range.collapse( true); // 移動插入光標(biāo)到start處
range.moveEnd( "character", end);
range.moveStart( "character", start);
range.select();
} // if
else if ( typeof textarea.setSelectionRange != 'undefined' )
{
textarea.setSelectionRange(start, end);
textarea.focus();
} // else
}
實(shí)現(xiàn)了選中區(qū)域獲取及設(shè)置方法后,其他如文字插入,替換的實(shí)現(xiàn)就比較簡單了。
非IE瀏覽器,如,firefox,chrome,支持 selectionStart 獲取選中區(qū)域的起點(diǎn),而IE瀏覽器不支持該屬性,需要間接通過TextRange來獲得,利用TextRange對象的compareEndPoints方法來進(jìn)行起點(diǎn)的比較可以實(shí)現(xiàn)。
復(fù)制代碼 代碼如下:
getStartPos : function( textarea )
{
if ( typeof textarea.selectionStart != 'undefined' )
{ // 非IE
start = textarea.selectionStart;
}
else
{ // IE
var range = document.selection.createRange();
var range_textarea = document.body.createTextRange();
range_textarea .moveToElementText(textarea);
//比較start point
for ( var sel_start = 0; range_textarea .compareEndPoints('StartToStart' , range) < 0; sel_start++)
range_textarea .moveStart( 'character', 1);
start = sel_start;
} // else
return start;
}
但有點(diǎn)需要注意的是,在chrome下,如果textarea設(shè)為readonley,那textarea不會出現(xiàn)輸入光標(biāo),返回的selectionStart與selectionEnd都為0.firefox下則正常。
(二)設(shè)置Textarea中選中的區(qū)域
類似的,非IE的瀏覽器支持setSelectionRange方法指定選中的字符范圍,而IE不支持,也是通過TextRange來操作,這里需要注意的是IE下Textarea的選中區(qū)間的相對位置問題。如下面的代碼是先moveStart,moveEnd把起點(diǎn)與終點(diǎn)都設(shè)為0,collapse移動生效后,起點(diǎn)不變,先moveEnd移動區(qū)間的終點(diǎn),再moveStart移動區(qū)間的起點(diǎn),在沒有改變起點(diǎn)point之前,可以保證相對位置不變,更容易理解些。
復(fù)制代碼 代碼如下:
/**
* 設(shè)置textarea的選中區(qū)域
*/
setSelectRange : function( textarea, start, end )
{
if ( typeof textarea.createTextRange != 'undefined' )// IE
{
var range = textarea.createTextRange();
// 先把相對起點(diǎn)移動到0處
range.moveStart( "character", 0)
range.moveEnd( "character", 0);
range.collapse( true); // 移動插入光標(biāo)到start處
range.moveEnd( "character", end);
range.moveStart( "character", start);
range.select();
} // if
else if ( typeof textarea.setSelectionRange != 'undefined' )
{
textarea.setSelectionRange(start, end);
textarea.focus();
} // else
}
實(shí)現(xiàn)了選中區(qū)域獲取及設(shè)置方法后,其他如文字插入,替換的實(shí)現(xiàn)就比較簡單了。
您可能感興趣的文章:
- 讓textarea自動調(diào)整大小的js代碼
- javascript textarea光標(biāo)定位方法(兼容IE和FF)
- 動態(tài)調(diào)整textarea中字體的大小代碼
- 新浪微博字?jǐn)?shù)統(tǒng)計 textarea字?jǐn)?shù)統(tǒng)計實(shí)現(xiàn)代碼
- Textarea與懶惰渲染實(shí)現(xiàn)代碼
- 非主流的textarea自增長實(shí)現(xiàn)js代碼
- 在chrome瀏覽器中,防止input[text]和textarea在聚焦時出現(xiàn)黃色邊框的解決方法
- js操作textarea方法集合封裝(兼容IE,firefox)
- JavaScript 獲取/設(shè)置光標(biāo)位置,兼容Input&&TextArea
- js封裝的textarea操作方法集合(兼容很好)
- javascript實(shí)現(xiàn)的textarea運(yùn)行框效果代碼 不用指定id批量指定
- JavaScript 監(jiān)聽textarea中按鍵事件
- javascript之textarea打字機(jī)效果提示代碼推薦
- 用javascript獲取textarea中的光標(biāo)位置
- textarea支持圖形編輯的實(shí)現(xiàn)方法
- 在textarea文本域中顯示HTML代碼的方法
- 關(guān)于textarea的直觀換行的一些研究材料
- JS TextArea字符串長度限制代碼集合
相關(guān)文章
javascript實(shí)現(xiàn)拖動元素交換位置
這篇文章主要介紹了javascript實(shí)現(xiàn)拖動元素交換位置的方法,類似拼圖游戲拖拽卡片效果,感興趣的小伙伴們可以參考一下2015-11-11js獲取TreeView控件選中節(jié)點(diǎn)的Text和Value值的方法
在實(shí)際項(xiàng)目中,遇到一個問題,首先彈出一個新窗口,新窗口中放了一個TreeView控件,現(xiàn)在要解決的是,如何單擊TreeView中一個節(jié)點(diǎn),返回Text和Value到父頁面并關(guān)閉該新窗口,本文將詳細(xì)介紹此方法的實(shí)現(xiàn)2012-11-11關(guān)于使用runtimeStyle屬性問題討論文章
關(guān)于使用runtimeStyle屬性問題討論文章...2007-03-03利用進(jìn)制轉(zhuǎn)換壓縮數(shù)字函數(shù)分享
本文主要介紹了進(jìn)制轉(zhuǎn)換函數(shù),用于壓縮數(shù)字,比如Date.now()這樣的長數(shù)字,用62進(jìn)制表示,就更短,大家參考使用吧2014-01-01