你如何获得textarea中的光标位置?

我有一个textarea,我想知道如果我在textarea的最后一行或textarea的第一行,并且使用javascript指定了光标。

我想抓住第一个换行符和最后一个换行符的位置,然后抓住光标的位置。

var firstNewline = $('#myTextarea').val().indexOf('n');
var lastNewline = $('#myTextarea').val().lastIndexOf('n');

var cursorPosition = ?????;

if (cursorPosition < firstNewline)
    // I am on first line.
else if (cursorPosition > lastNewline)
    // I am on last line.
  • 是否有可能抓住textarea内的光标位置?
  • 你有没有更好的建议,看看我是否在textarea的第一行或最后一行?
  • jQuery解决方案首选,除非JavaScript是简单或更简单。

    任何帮助深表感谢。


    如果没有选择,你可以使用属性.selectionStart.selectionEnd (没有选择他们是平等的)。

    var cursorPosition = $('#myTextarea').prop("selectionStart");
    

    请注意,这在旧版浏览器中不受支持,最值得注意的是IE8-。 在那里你必须使用文本范围,但这是一个完全的沮丧。

    尽管如此,我相信在某个地方有一个图书馆可以在输入元素中获取和设置选择/光标位置。 我不记得它的名字,但似乎有几十篇关于这个主题的文章。


    我已经做了相当多的工作,并在Stack Overflow上多次发布了一个用于在textareas中获取插入/选择位置的函数。 与其他几乎所有其他代码不同,它可以在IE <9中使用换行符正常工作。

    以下是一些具有背景的示例问题:

    是否有Internet Explorer批准的selectionStart和selectionEnd替代品?

    这里是我写的一个jQuery插件的链接,包括这个函数和其他与选择相关的textarea函数:

    https://github.com/timdown/rangyinputs


    这是我在标准库中的一个跨浏览器功能:

    function getCursorPos(input) {
        if ("selectionStart" in input && document.activeElement == input) {
            return {
                start: input.selectionStart,
                end: input.selectionEnd
            };
        }
        else if (input.createTextRange) {
            var sel = document.selection.createRange();
            if (sel.parentElement() === input) {
                var rng = input.createTextRange();
                rng.moveToBookmark(sel.getBookmark());
                for (var len = 0;
                         rng.compareEndPoints("EndToStart", rng) > 0;
                         rng.moveEnd("character", -1)) {
                    len++;
                }
                rng.setEndPoint("StartToStart", input.createTextRange());
                for (var pos = { start: 0, end: len };
                         rng.compareEndPoints("EndToStart", rng) > 0;
                         rng.moveEnd("character", -1)) {
                    pos.start++;
                    pos.end++;
                }
                return pos;
            }
        }
        return -1;
    }
    

    像这样在你的代码中使用它:

    var cursorPosition = getCursorPos($('#myTextarea')[0])
    

    这是它的补充功能:

    function setCursorPos(input, start, end) {
        if (arguments.length < 3) end = start;
        if ("selectionStart" in input) {
            setTimeout(function() {
                input.selectionStart = start;
                input.selectionEnd = end;
            }, 1);
        }
        else if (input.createTextRange) {
            var rng = input.createTextRange();
            rng.moveStart("character", start);
            rng.collapse();
            rng.moveEnd("character", end - start);
            rng.select();
        }
    }
    

    http://jsfiddle.net/gilly3/6SUN8/

    链接地址: http://www.djcxy.com/p/65465.html

    上一篇: How do you get the cursor position in a textarea?

    下一篇: Get Mouse Position