EN · DE · RU · FR · ES

#2760: select.js

projectforge-webapp/src/utilities/select.js Утилита DOM (один экспорт) · projectforge-webapp/src/utilities/select.js 17 строк · 14 кода · 2 комментария · 1 пустая
Кросс-браузерная утилита для выделения текста, которая программно выделяет всё текстовое содержимое DOM-узла, обеспечивая поведение «один клик для копирования» для полей только для чтения. Функция обрабатывает две эпохи браузерных API: устаревший подход Internet Explorer createTextRange и современный стандартный подход window.getSelection() / document.createRange(). Она вызывается компонентом DynamicReadonlyField, чтобы при клике на поле только для чтения его текст выделялся для удобного копирования.

Архитектура

Двойной путь выполнения

Функция ветвится на document.body.createTextRange — это свойство существует только в Internet Explorer (и ранних версиях Edge). Если оно присутствует, используется проприетарный объект TextRange от IE с вызовом moveToElementText для привязки диапазона к содержимому узла, затем select() для выделения. Если свойство отсутствует (все современные браузеры), используется W3C Selection API: создаётся объект Range, вызывается selectNodeContents на целевом узле, очищается текущее выделение и добавляется новый диапазон.

Контекст использования

Импортируется компонентами ввода DynamicLayout, в частности DynamicReadonlyField. Когда пользователь кликает на поле только для чтения (например, расчётный номер центра затрат или системный идентификатор), всё его текстовое содержимое автоматически выделяется, что позволяет сразу скопировать его через Ctrl+C / Cmd+C без ручного выделения мышью. Ссылка на исходный алгоритм: ответ на Stack Overflow #987376.

История Git

КоммитЧто изменилось
21305e884Добавлены два комментария: указание источника со ссылкой на ответ Stack Overflow, откуда был адаптирован алгоритм, и встроенная метка // internet-explorer над веткой createTextRange для пояснения, почему используются два разных API выделения. Функциональных изменений нет.
117f7fe25Создан файл с кросс-браузерной функцией выделения текста и её экспортом по умолчанию. Это было частью реализации поведения «клик для выделения» для полей только для чтения в динамической форме веб-приложения.