Я работаю над пользовательским токеном, основанным на textarea. Идея состоит в том, чтобы текстовая область с элементами div абсолютно позиционировалась выше, поэтому она выглядит , как будто они находятся в текстовой области.
Пока это было больно, но мне удалось сделать почти все, кроме одной вещи.
Возможно ли вообще в javascript установить обратный выбор? Когда вы поместите курсор где-нибудь посередине текстовой области, удерживая нажатой клавишу Shift и несколько раз нажмите стрелку влево, вы получите выделение. Сложность в том, что это не обычное дело - оно задом наперед (начало начинается справа от конца, а не так, как обычно). В моей текстовой области есть заполнители, над которыми я отображаю свои элементы (токены). Когда вы переходите к одному из них, курсор переходит на противоположный край заполнителя, так что это кажется естественным. Когда вы удерживаете нажатой клавишу shift и достигаете заполнителя, он переходит вправо и устанавливает новый выбор, поэтому он выглядит так, как будто вы выбрали токен (вы можете нажать «Удалить» и удалить выбранный диапазон с помощью самого токена, что круто) , НО это не сработает, если вы перемещаетесь справа налево, потому что установка нового выделения сделает его необратимым:
Выбор слева направо:
abcde[start]efg[end](token)
[shift]+[right]
abcde[start]efg(token)[end]
[del]
abcde
Выбор справа налево
(token)[end]efg[start]abcde
[shift]+[left]
[start](token)abcdeefg[end] //see? it's back to normal
[shift]+[left]
[start](token)abcdeef[end]g //huh?! shift-right moves end point (unexpected)
abcde
Итак, вот вопрос: могу ли я установить выделение в текстовой области, где начальная точка будет больше конечной точки? Просто element.setSelectionRange(right, left)
не работает в firefox, есть еще идеи?