Я пытаюсь создать свой собственный выбор текста с помощью DOM-элементов. Да, я имею в виду синий фон, который вы видите за текстом, когда вы выбираете его в этом элементе. Идея состоит в том, чтобы остановить поведение по умолчанию (синий цвет) и использовать мои собственные элементы для выполнения задания, найдя xy-позицию выбора и затем помещая элементы с абсолютным позиционированием. Я хочу иметь возможность сделать это с помощью обычного div
.Расчет xy-позиции выбора текста
Я думаю, мне нужно 3 элемента. Один для верхнего ряда (который может быть неполным), один для среднего фрагмента, один для последнего (тот же, что и верхний). Вот изображение, которое поможет вам понять:
Я думал ловить mouseup/down
, а затем mousemove
, а затем проверить window.getSelection()
, но до сих пор у меня возникают проблемы при получении в любом месте.
Использование CSS ::selection
не будет работать, потому что элемент не будет иметь фокуса.
Я ценю всю помощь, которую я могу получить! Заранее спасибо.
Редактировать: Наткнулся на https://code.google.com/p/rangy/, который может быть полезен? Любой, у кого есть опыт работы с этим плагином?
Редактировать2: Требуется кросс-браузерная поддержка.
Я не уверен, что вы можете предотвратить выделение текста без отключения функций. ['user-select '] (https://developer.mozilla.org/en-US/docs/Web/CSS/user-select) позволяет предотвратить выбор области, но это означает, что вы не сможете разрезать и вставить. Другая проблема - производительность. Использование javascript для рендеринга выделения будет намного медленнее, чем буква, которую браузер/os делает изначально. –
@IsaacSuttell: Вы не можете уловить 'onselect' и предотвратить действие по умолчанию? Я бы так подумал. Но это, вероятно, также уничтожит функцию 'window.getSelection()'. Я не думаю, что будет огромный успех, всего три элемента. Кажется, что Codemirror справляется с этим довольно хорошо, но я понятия не имею. –
Я считаю, что '' onselect' ограничено тегами формы (http://www.w3schools.com/jsref/event_onselect.asp). –