Во-первых, как в принципе, так и на практике плохая идея расширять хост-объекты.Хост-объекты, такие как элементы DOM, могут делать то, что им нравится;в частности, они не обязаны поддерживать то, что вы пытаетесь сделать, и в IE <= 8, на что вы нацелены с помощью этого кода, элементы DOM просто не поддерживают это.Вы можете либо использовать функцию, которой вы передаете элемент ввода, либо создать объект-оболочку для каждого ввода, имеющего необходимые методы и свойства. </p>
Во-вторых, ваши функции GetSelectionStart()
и GetSelectionEnd()
имеют недостатки: они не будут правильно обрабатывать новые строки в текстовых областях и имеют некорректную логику около lastIndexOf
(что, если выделенный текст появляется более одного раза во входных данных?).Я проделал довольно большую работу над этим и пришел к выводу, что, как я убежден, это лучшая функция для получения ввода и выбора текстовой области во всех основных браузерах, которую я в последний раз выкладывал здесь пару дней назад: Возможно ли программно определить положение каретки в пределахэлемент