论坛首页 Web前端技术论坛

jquery获取(设置)文本框(块)内光标位置插件

浏览 9924 次
精华帖 (0) :: 良好帖 (7) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-03   最后修改:2009-10-13
/**
 * @author 全冠清
 */
$.fn.extend({
	position:function( value ){
		var elem = this[0];
			if (elem&&(elem.tagName=="TEXTAREA"||elem.type.toLowerCase()=="text")) {
			   if($.browser.msie){
					   var rng;
					   if(elem.tagName == "TEXTAREA"){ 
						    rng = event.srcElement.createTextRange();
						    rng.moveToPoint(event.x,event.y);
					   }else{ 
					    	rng = document.selection.createRange();
					   }
					   if( value === undefined ){
					   	 rng.moveStart("character",-event.srcElement.value.length);
					     return  rng.text.length;
					   }else if(typeof value === "number" ){
					   	 var index=this.position();
						 index>value?( rng.moveEnd("character",value-index)):(rng.moveStart("character",value-index))
						 rng.select();
					   }
				}else{
					if( value === undefined ){
					   	 return elem.selectionStart;
					   }else if(typeof value === "number" ){
					   	 elem.selectionEnd = value;
       			         elem.selectionStart = value;
					   }
				}
			}else{
				if( value === undefined )
				   return undefined;
			}
	}
})

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
		<title>测试</title>
	</head>
	<script language="JavaScript" type="text/javascript" src="jquery-1.3.1.min.js"></script>
	<script language="JavaScript" type="text/javascript" src="jquery-position.js"></script>
	<script language="JavaScript" type="text/javascript">
		$(document).ready(function(){
			$('input:eq(0)').click(function(){
				alert($(this).position());
			})
			$('input:eq(1)').click(function(){
				$(this).position(4);
			})
		})
	</script>
	<body>
		<input type="text"  value="123456789"/>
		<input type="text"  value="123456789"/>
	</body>
</html>

全冠清 写道
    $.fn.selectRange = function(start, end){
        return this.each(function(){
            if (this.setSelectionRange) {
                this.focus();
                this.setSelectionRange(start, end);
            }
            else 
                if (this.createTextRange) {
                    var range = this.createTextRange();
                    range.collapse(true);
                    range.moveEnd('character', end);
                    range.moveStart('character', start);
                    range.select();
                }
        });
    };

   发表时间:2009-08-03  
js 看不懂
0 请登录后投票
   发表时间:2009-08-03  
    $.fn.selectRange = function(start, end){
        return this.each(function(){
            if (this.setSelectionRange) {
                this.focus();
                this.setSelectionRange(start, end);
            }
            else 
                if (this.createTextRange) {
                    var range = this.createTextRange();
                    range.collapse(true);
                    range.moveEnd('character', end);
                    range.moveStart('character', start);
                    range.select();
                }
        });
    };
0 请登录后投票
   发表时间:2009-08-04  
支持一个,不知道什么场景下会用到?
0 请登录后投票
   发表时间:2009-08-04  
quaff 写道
支持一个,不知道什么场景下会用到?

对输入进行一些控制时,如输入金额小数点时判断插入位置是否合法
0 请登录后投票
   发表时间:2009-09-25  
不知道浏览器兼容性方面如何
0 请登录后投票
   发表时间:2009-09-25  
刚测试了一下 都可以用 不错的插件 谢谢
0 请登录后投票
   发表时间:2010-01-12   最后修改:2010-01-12

非常感谢楼主提供的插件,相当好用。

这次正好用在项目里了,由于项目一些特殊需求,进行了一点点小的改动:

 

/**
 * @author 全冠清
 */
$.fn.extend({
	position:function( pos, text ){
		var elem = this[0];
		if (elem&&(elem.tagName=="TEXTAREA"||elem.type.toLowerCase()=="text")) {
			if($.browser.msie){
				var rng;
				if(elem.tagName == "TEXTAREA"){ 
					rng = event.srcElement.createTextRange();
					rng.moveToPoint(event.x,event.y);
				}else{ 
					rng = document.selection.createRange();
				}
				if( pos === undefined ){
					rng.moveStart("character",-event.srcElement.value.length);
					return  rng.text.length;
				}else if(typeof pos === "number" ){
					var index=this.position();
					index>pos?( rng.moveEnd("character",pos-index)):(rng.moveStart("character",pos-index))
					rng.select();
					if( text === undefined ) {
						return pos;
					}
				}
			}else{
				if( pos === undefined ){
					return elem.selectionStart;
				}else if(typeof pos === "number" ){
					elem.selectionEnd = pos;
					elem.selectionStart = pos;
					if( text === undefined ) {
						return pos;
					}
				}
			}
			if( text !== undefined ) {
				var len = elem.value.length;
				if(len<1 || pos<0) {
					pos = 0;
				} else if( pos>len ) {
					pos = len;
				}
				var text1 = elem.value.substr(0,pos);
				var text2 = elem.value.substr(pos);
				pos += text.length;
				elem.value = text1+text+text2;
				return this.position(pos);
			}
		}else{
			var index = 0;
			if( typeof pos === "number") {
				index += pos;
			}
			return index;
		}
	}
})
 

 

改动点:

   1:返回结果都统一返回位置信息,如果浏览器不兼容,返回0;

   2:增加一个参数,以便在指定位置插入字符串。

0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics