通过 JavaScript 获取和设置光标在输入框中的位置(兼容 IE 及 F

来源:未知 责任编辑:责任编辑 发表时间:2013-11-26 22:14 点击:

function getLocation(elm) { 
    if(elm.createTextRange) { // IE              
        var range = document.selection.createRange();                
        range.setEndPoint('StartToStart', elm.createTextRange());                
        return range.text.length; 
    } else if(typeof elm.selectionStart == 'number') { // Firefox 
        return elm.selectionStart; 
    } 

 
function setLocation(elm, n) { 
    if(n > elm.value.length) 
        n = elm.value.length; 
    if(elm.createTextRange) {   // IE 
        var textRange = elm.createTextRange(); 
        textRange.moveStart('character', n);             
        textRange.collapse();        
        textRange.select();      
    } else if(elm.setSelectionRange) { // Firefox 
        elm.setSelectionRange(n, n); 
        elm.focus(); 
    } 


其中几个函数的说明:

IE:

  TextRange.setEndPoint('StartToStart', elm.createTextRange()):将 TextRange 的起始位置调整到 elm.createTextRange() 的起始位置处。第二个参数必须是一个 TextRange,第一个参数必须为以下四个值:StartToStart、StartToEnd、EndToStart、EndToEnd,StartToStart 的意思就是将 TextRange 的起始位置设置为第二个参数的起始位置,同理可知 StartToEnd 的意思就是将 TextRange 的起始位置设置为第二个参数的终止位置,依此类推,EndToStart 和 EndToEnd 也就很好理解了。
  TextRange.moveStart('character', n): 将 TextRange 的起始位置后移到 n 个字符处,另外还有一个函数是 moveEnd('character', n),这是移动 TextRange 的终止位置,若要将终止位置前移,应使用 -n 而不是 n(假定 n 为正数)。

  TextRange.collapse():将文本插入点设置到 TextRange 当前起始位置处,若要设置到终止位置处,使用 TextRange.collapse(false)。实际上,设置插入点就是起点和终点设置到同一位置上,这大概也就是 collapse 这个名称的来由吧。所以,该语句也可换成 textRange.moveEnd('character', n - elm.value.length),只是看起来没那么简明而已。

  关于 TextRange 对象,查询一下 IE 的 DOM 手册便知。

 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Gb2312转utf-8编码的方法(vbs+js)
  • 如何使用Ajax技术开发Web应用程序(1)
  • js跳转路径问题
  • JavaScript模仿桌面窗口
  • 用js检测两个线段是否相交
  • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
  • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
  • 我是如何去了解jquery的(六),案例之幻灯片轮换
  • Jquery封装幻灯片效果
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1