js获取光标位置

作者: Stevenzwzhai | 来源:发表于2017-01-08 01:53 被阅读3956次

    关于光标位置,一般是很少用到的,之前也没怎么研究过,只知道可以获取鼠标选中文字的开始位置和结束位置,而且IE和其他浏览器还不兼容。最近有个需求需要获取光标位置,所以研究了下,至于那个比较坑的项目需求,后期整理出来再写。

    1.首先是关于光标位置的问题

    光标位置获取,DOM并没有提供这个属性,所以就需要其他方法来间接获取了,我们都知道,在页面中是可以获取选中的文字的,当然对于可编辑区域也是可以的,同时也有相关一些其他属性,比如起始位置和结束位置,我们延伸一下,如果起始位置和结束位置一样呢,这个第一层代表的含义就是我们选了,但是又没选上(这不是废话么),当然如果普通文本的话在页面没什么影响,但是在可编辑区域中我们会发现其实光标放在了起始位置(也是结束位置),所以光标位置就可以这么来获取,要用的就是selection。

    2.获取光标的方法

    获取光标的方法关键就是selection,但是IE和其他浏览器又不一致,在IE下,selection是在document上的,而其他浏览器是在windows下。直接上代码:

    function getCursortPosition (obj) {
        var cursorIndex= 0;
        if (document.selection) {
            // IE Support
            obj.focus ();
            var range= document.selection.createRange();
            range.moveStart ('character', -obj.value.length);
            cursorIndex= range.text.length;
        }else if (obj.selectionStart || obj.selectionStart==0) {
            // another support
            cursorIndex= obj.selectionStart;
        }
        return cursorIndex;
    }
    

    在使用过程中发现,如果在可编辑区域发生事件focus时候调用这个方法,得到的返回值永远是0,我测试之后发现,这个时候obj.selectionStart返回的是0,所以是不起作用的,建议给可编辑区域加click事件来触发获取光标。还有一点,就是我测试在IE11下其实是支持obj.selectionStart的。

    3.设置光标位置

    有了上面的介绍,设置光标位置就很容易了,只需要将selectionStart和selectionEnd设置为一样即可。
    具体测试代码看我github:https://github.com/Stevenzwzhai/plugs/tree/master/selection-%E5%8F%AF%E7%BC%96%E8%BE%91%E5%8C%BA%E5%85%89%E6%A0%87%E4%BD%8D%E7%BD%AE

    相关文章

      网友评论

      本文标题:js获取光标位置

      本文链接:https://www.haomeiwen.com/subject/pexqbttx.html