Блог веб разработки

Блог веб-разработки статьи | видеообзоры | исходный код

selection javascript

Всем привет! Сегодня мы с вами рассмотрим возможности объекта selection. Данный объект возвращает информацию о выделенной части текста. Итак, поехали!

Для начало давайте выделим часть контента на сайте и попробуем выполнить в консоли браузера следующую команду.

var selection = window.getSelection();
console.log(selection);

В результате нам вернется объект selection со множеством параметров с помощью которых мы сможем получить наш выделенный текст.

Для более удобной читабельности все это дело можно облагородить используя метод getRangeAt().

var selection = window.getSelection();
var selRange = selection.getRangeAt(0);
console.log(selRange);

Здесь в объекте selection мы оставили только основные параметры тем самым упрощая работу с данным объектом.

Теперь пойдем по порядку и рассмотрим самые основные свойства(параметры) объекта selection.

Свойство startContainer возвращает весь текст элемента в котором мы осуществили его выделение.

selRange.startContainer;

Причем тут стоит две особенности. Во первых данный параметр возвращает не сам выделенный текст, а весь текст элемента в котором мы осуществляем выделение. Во вторых если мы выделим текст двух разных элементов данное свойство вернет текст только первого из них.

Для того чтобы получить все элементы в которых мы осуществляем выделение текста можно воспользоваться свойством commonAncestorContainer.

selRange.commonAncestorContainer;

В результате нам вернется dom структура элементов, текст которых был выделен.

Для того чтобы их все перебрать достаточно воспользоваться свойством

NodeList. selRange.commonAncestorContainer.childNodes;

На выходе будет получен массив с элементами текст которых был выделен. Чтобы получить текст который мы выделили необходимо воспользоваться еще двумя параметрами startOffset и endOffset. Данные свойства возвращает начальную и конечную позицию строки элемента. Именно эти два параметра и определяют область выделения.

Пример:

var selection = window.getSelection();
var selRange = selection.getRangeAt(0);
var text = selRange.startContainer.data,
	start = selRange.startOffset,
	end = selRange.endOffset;
console.log(text.substring(start, end));

С помощью данного кода мы и получаем часть текста которую выделили. Как видите вначале получаем текст всего элемента, начальную и конечную позицию выделения и помещаем все это дело в переменные. Заметьте что при использовании свойства startContainer мы в конце обращаемся к ключу data. Все дело в том что параметр startContainer изначально возвращает объект в виде строки текста. И для получения самой строки необходимо обратится к ключу data.

В конце при выводе мы используем стандартную функцию substring() в которую передаем начальную и конечную позицию выделения. Отмечу что данный код работает при условии когда выделен текст в пределах одного элемента(тега) страницы.

Для того чтобы получить и соединить текст выделенный в разных элементах необходимо еще немного повозится. Ну да ладно. Оставляю данную задачу вам в качестве домашнего задания для закрепления навыков).

А на этом у меня на сегодня все. Не забывайте оставлять комментарии и подписывайтесь в мою группу

вк.

Желаю вам успехов и удачи! Пока.

Оцените статью

Еще статьи

box-shadow css

Работа с выделением текста и курсором.

Javascript window

Мета теги

база данных php

Аргументы функций php

vw vh css

отступ текста css

Комментарии

Проверочный код

В данном разделе пока нет комментариев!

История

    ПОДПИСКА

    • Подпишись и получай информацию о выходе новых статей на почту! Просто введите свою почту, нажмите кнопку подписаться. На почту должно будет прийти сообщение с потверждением подписки. Если сообщение не пришло проверьте раздел спам или попробуйте другую почту. Также по всем техническим проблемам вы можете написать в поддержку

    НОВОСТИ

    • Всем привет! Запустил новый сервис для поиска и бесплатного скачивания, прослушивания аудиокниг. Здесь вы можете найти множество литературы и прослушать ее. Вскоре возобновлю написание статей.