Javascript: переместить курсор на последний символ

у меня есть textarea, и когда я нажимаю на него, я хочу переместить курсор на последний символ так Something[caret]

function moveCaret(){
     // Move caret to the last character
}
<textarea onclick="moveCaret();">
     Something
</textarea>

как я знаю, это как-то возможно с объектом TextRange, но я действительно не знаю, как его использовать

EDIT: Я хотел бы видеть только чистые решения javascript, поэтому никаких библиотек, пожалуйста.

1 ответов


следующая функция будет работать во всех основных браузерах, как для текстовых полей, так и для текстовых входов:

function moveCaretToEnd(el) {
    if (typeof el.selectionStart == "number") {
        el.selectionStart = el.selectionEnd = el.value.length;
    } else if (typeof el.createTextRange != "undefined") {
        el.focus();
        var range = el.createTextRange();
        range.collapse(false);
        range.select();
    }
}

однако вы действительно не должны делать это всякий раз, когда пользователь нажимает на textarea, так как пользователь не сможет переместить курсор с помощью мыши. Вместо этого сделайте это, когда textarea получает фокус. Существует также проблема в Chrome, с которой можно работать следующим образом:

полный пример: http://www.jsfiddle.net/ghAB9/3/

HTML:

<textarea id="test">Something</textarea>

сценарий:

var textarea = document.getElementById("test");
textarea.onfocus = function() {
    moveCaretToEnd(textarea);

    // Work around Chrome's little problem
    window.setTimeout(function() {
        moveCaretToEnd(textarea);
    }, 1);
};