Подтвердить что ты не робот

JQuery: получить курсорную позицию текста во входных данных без кода браузера?

Есть ли какой-либо способ в jQuery получить текущую позицию курсора в текстовом вводе, не делая уродливого кода браузера?

Как в:

<input id="myTextInput" type="text" value="some text" >

курсор после "x" "некоторого текста", я могу получить "8"?

4b9b3361

Ответ 1

Вы не можете сделать это без какого-либо определенного кода браузера, так как они реализуют выбор текста немного по-другому. Однако есть плагины, которые абстрагируют это. Для того, что вам нужно, там плагин jQuery Caret (jCaret).

Здесь вы можете попробовать демо.

Для вашего кода, чтобы получить позицию, вы можете сделать что-то вроде этого:

$("#myTextInput").bind("keydown keypress mousemove", function() {
  alert("Current position: " + $(this).caret().start);
});

Вы можете протестировать его здесь.

Ответ 2

Предупреждение о плагине JQuery Caret.

Он будет конфликтовать с Masked Input plugin (или наоборот). К счастью, плагин Masked Input включает в себя собственную функцию каретки(), которую вы можете использовать очень похоже на плагин Caret для ваших основных потребностей - $(element).caret(). Begin или .end

Ответ 3

Используя синтаксис text_element.selectionStart, мы можем получить начальную позицию выбора текста в терминах индекса первого символа выделенного текста в text_element.value, и в случае, если мы хотим получить то же самое из последний символ в выборе мы должны использовать text_element.selectionEnd.

Используйте его следующим образом:

<input type=text id=t1 value=abcd>
<button onclick="alert(document.getElementById('t1').selectionStart)">check position</button>

Я даю вам fiddle_demo