优化后的光标插件
$.fn.extend({
position:function( value ){
var ele = this[0],
textarea=(ele.tagName.toLocaleLowerCase()==="textarea"),
input=(ele.tagName.toLocaleLowerCase()==="input");
if(!(ele&&(textarea||input))) return undefined;
if($.browser.msie){
var rng,rng2,len;
rng=document.selection.createRange();
rng2=rng.duplicate();
rng2.moveStart("character",-ele.value.length);
len=rng2.text.length
if( value === undefined ){
return len;
}else if(typeof value === "number" ){
if(value<len){
rng.moveStart('character',value-len);
rng.collapse(true);
}else{
rng.moveEnd('character',value-len);
rng.collapse(false);
}
rng.select();
}
}else{
if( value === undefined ){
return ele.selectionStart;
}else if(typeof value === "number" ){
ele.selectionEnd = value;
ele.selectionStart = value;
}
}
}
});
近期遇到获取和设置光标位置的问题,查阅相关资料,发现这个插件(http://www.oschina.net/code/snippet_4873_3395),但是有兼容问题(这个插件在只有点击输入框时是有效的),我的需求是点击一个按钮设置光标位置,这时这个插件在IE下就不行了。再次仔细琢磨javascript高级程序设计 范围 和 表单脚本 两章。发现作者的写法也欠妥,现将优化后的代码分享于大家
还是感谢原作者 http://my.oschina.net/huateng
//IE文本元素失去焦点 后无法取到光标位置,得在click事件记住光标位置