优化后的光标插件

$.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事件记住光标位置

posted @ 2014-01-13 18:42  三剑客  阅读(360)  评论(0编辑  收藏  举报