Я пытаюсь извлечь точный выбор и расположение курсора из текстового поля. Как обычно, то, что легко в большинстве браузеров, не в IE.IE document.selection.createRange не включает ведущие или завершающие пустые строки
Я использую это:
var sel=document.selection.createRange();
var temp=sel.duplicate();
temp.moveToElementText(textarea);
temp.setEndPoint("EndToEnd", sel);
selectionEnd = temp.text.length;
selectionStart = selectionEnd - sel.text.length;
Который работает 99% времени. Проблема в том, что TextRange.text
не возвращает символы ведущей или завершающей строки. Поэтому, когда курсор представляет собой пару пустых строк после абзаца, он дает позицию в конце предыдущего абзаца, а не фактическую позицию курсора.
например:
the quick brown fox| <- above code thinks the cursor is here
| <- when really it's here
Единственное исправление я могу думать о том, чтобы временно вставить символ до и после выбора, захватить фактический выбор, а затем удалить эти временные символы снова. Это взломать, но в быстром эксперименте похоже, что это сработает.
Но сначала я хотел бы быть уверенным, что нет более простого способа.
Ницца. Как идея использования длины текста вместо действительно большого числа на moveStart/moveEnd. –
А, я не видел этого. Результат - 20-30 мс, отличная работа! –
@ Энди: Я написал плагин jQuery, который включает в себя это. Еще не задокументирован и не связан с проектом, связанным с тенью, но работает: http://code.google.com/p/rangy/downloads/detail?name=textinputs_jquery-src.js –