萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> 文本域光標操作的jQuery擴展分享

文本域光標操作的jQuery擴展分享

 最近的項目中,好幾次用到操作文本域的方法,比如光標位置、刪除光標前字符等。每次都是查閱資料(這部分操作涉及到的js方法都比較生僻),費時費事。於是就封裝了一個jQuery擴展

該針對文本域的擴展實現的功能及使用方法: 1、獲取光標位置:$(elem).iGetFieldPos(); 2、設置光標位置:$(elem).iSelectField(start); 3、選中指定位置內的字符:$(elem).iSelectField(start,end); 4、選中指定的字符:$(elem).iSelectStr(str); 5、在光標之後插入字符串:$(elem).iAdd(str); 6、刪除光標前面(-n)或者後面(n)的n個字符:$(elem).iDel(n);   jQuery擴展代碼: 代碼如下: ;(function($){     /*      * 文本域光標操作(選、添、刪、取)的jQuery擴展      */     $.fn.extend({         /*          * 獲取光標所在位置          */         iGetFieldPos:function(){             var field=this.get(0);             if(document.selection){                 //IE                 $(this).focus();                 var sel=document.selection;                 var range=sel.createRange();                 var dupRange=range.duplicate();                 dupRange.moveToElementText(field);                 dupRange.setEndPoint('EndToEnd',range);                 field.selectionStart=dupRange.text.length-range.text.length;                 field.selectionEnd=field.selectionStart+ range.text.length;             }             return field.selectionStart;         },         /*          * 選中指定位置內字符 || 設置光標位置          * --- 從start起選中(含第start個),到第end結束(不含第end個)          * --- 若不輸入end值,即為設置光標的位置(第start字符後)          */         iSelectField:function(start,end){             var field=this.get(0);             //end未定義,則為設置光標位置             if(arguments[1]==undefined){                 end=start;             }             if(document.selection){                 //IE                 var range = field.createTextRange();                 range.moveEnd('character',-$(this).val().length);                 range.moveEnd('character',end);                 range.moveStart('character',start);                 range.select();             }else{                 //非IE                 field.setSelectionRange(start,end);                 $(this).focus();             }         },         /*          * 選中指定字符串          */         iSelectStr:function(str){             var field=this.get(0);             var i=$(this).val().indexOf(str);             i != -1 ? $(this).iSelectField(i,i+str.length) : false;         },         /*          * 在光標之後插入字符串          */         iAddField:function(str){             var field=this.get(0);             var v=$(this).val();             var len=$(this).val().length;             if(document.selection){                 //IE                 $(this).focus()                 document.selection.createRange().text=str;             }else{                 //非IE                 var selPos=field.selectionStart;                 $(this).val($(this).val().slice(0,field.selectionStart)+str+$(this).val().slice(field.selectionStart,len));                 this.iSelectField(selPos+str.length);             };         },         /*          * 刪除光標前面(-)或者後面(+)的n個字符          */         iDelField:function(n){             var field=this.get(0);             var pos=$(this).iGetFieldPos();             var v=$(this).val();             //大於0則刪除後面,小於0則刪除前面             $(this).val(n>0 ? v.slice(0,pos-n)+v.slice(pos) : v.slice(0,pos)+v.slice(pos-n));             $(this).iSelectField(pos-(n<0 ? 0 : n));         }     }); })(jQuery);     加載於擴展代碼,然後根據擴展中的方法名調用即可。  
copyright © 萬盛學電腦網 all rights reserved