JavaScript. Подробное руководство, 6-е издание, стр. 228

Стандартный метод

<b>window.getSelection()</b>
возвращает объект
<b>Selection</b>
, описывающий текущий выделенный текст, как последовательность одного или более объектов
<b>Range</b>
. Объекты
<b>Selection</b>
и
<b>Range</b>
определяют чрезвычайно сложный прикладной интерфейс, который практически не используется и не описывается в этой книге. Наиболее важной и широко реализованной (везде, кроме IE) особенностью объекта
<b>Selection</b>
является его метод
<b>toString(),</b>
который возвращает простое текстовое содержимое выделенной области.

Броузер IE определяет иной прикладной интерфейс, который не описывается в этой книге. Метод

<b>document.selection</b>
возвращает объект, представляющий выделенную область. Метод
<b>createRange()</b>
этого объекта возвращает реализованный только в IE объект
<b>TextRange</b>
, свойство
<b>text</b>
которого содержит выделенный текст.

Прием, подобный приведенному в примере выше, в частности, может пригодиться в букмарклетах (раздел 13.2.5.1) для организации поиска выделенного текста в поисковых системах или на сайте. Так, следующая HTML-ссылка пытается отыскать текущий выделенный фрагмент текста в Википедии. Если поместить в закладку эту ссылку и URL-адрес со спецификатором javascript:, закладка превратится в букмарклет:

<b>&lt;а href=&quot;javascript: var q;</b>

<b>       if (window.getSelection)</b>

<b>         q = window.getSelection().toString();</b>

<b>       else</b>

<b>         if (document.selection)</b>

<b>           q = document.selection.createRange().text;</b>

<b>       void window.open('</b><a href="http://ru.wikipedia.org/wiki/'"><b>http://ru.wikipedia.org/wiki/'</b></a><b> + q);&quot;&gt;</b>

<b>  Поиск выделенного текста в Википедии</b>

<b>&lt;/а&gt;</b>

В примере выше, выбирающем выделенный текст, есть одна проблема, связанная с несовместимостью. Метод

<b>getSelection()</b>
объекта
<b>Window</b>
не возвращает выделенный текст, если он находится внутри элемента
<b>&lt;input&gt;</b>
или
<b>&lt;textarea&gt;</b>
: он возвращает только тот текст, который выделен в теле самого документа. В то же время свойство
<b>document.selection</b>
, поддерживаемое броузером IE, возвращает текст, выделенный в любом месте в документе.

Чтобы получить текст, выделенный в текстовом поле ввода или в элементе

<b>&lt;textагеа&gt;</b>
, можно использовать следующее решение:

<b>elt.value.substring(elt.selectionStart, elt.selectionEnd);</b>

Свойства

<b>selectionStart</b>
и
<b>selectionEnd</b>
не поддерживаются в версиях IE8 и ниже.

15.10.4. Редактируемое содержимое

Мы уже познакомились с элементами форм, включая текстовые поля ввода и элементы

<b>textarea</b>
, которые дают пользователям возможность вводить и редактировать простой текст. Вслед за IE все текущие веб-броузеры стали поддерживать простые средства редактирования разметки HTML. Вы можете увидеть их в действии на страницах (например, на страницах блогов, где можно оставлять комментарии), встраивающих редактор форматированного текста с панелью инструментов, содержащей кнопки для выбора стиля отображения шрифта (полужирный, курсив), настройки выравнивания и вставки изображений и ссылок.

Существует два способа включения поддержки возможности редактирования. Можно установить HTML-атрибут

<b>contenteditable</b>
любого тега или установить JavaScript-свойство
<b>contenteditable</b>
соответствующего элемента
<b>Element</b>
, содержимое которого разрешается редактировать. Когда пользователь щелкнет на содержимом внутри этого элемента, появится текстовый курсор и пользователь сможет вводить текст с клавиатуры. Ниже представлен HTML-элемент, создающий область редактирования:

<b>&lt;div id=&quot;editor&quot; contenteditable&gt;</b>

<b>  Щелкните здесь, чтобы отредактировать</b>

<b>&lt;/div&gt;</b>

Броузеры могут поддерживать автоматическую проверку орфографии для полей форм и элементов с атрибутом

<b>contenteditable</b>
. В броузерах, поддерживающих такую проверку, она может быть включена или выключена по умолчанию. Чтобы явно включить ее, следует добавить атрибут
<b>spellcheck</b>
. А чтобы явно запретить -добавить атрибут
<b>spellcheck=false</b>
(если, например, в элементе
<b>&lt;textarea&gt;</b>
предполагается выводить программный код или другой текст с идентификаторами, отсутствующими в словаре).

Точно так же можно сделать редактируемым весь документ, записав в свойство

<b>designMode</b>
объекта
<b>Document</b>
строку «оп». (Чтобы снова сделать документ доступным только для чтения, достаточно записать в это свойство строку «off».) Свойство
<b>designMode</b>
не имеет соответствующего ему HTML-атрибута. Можно сделать документ доступным для редактирования, поместив его в элемент
<b>&lt;iframe&gt;</b>
, как показано ниже (обратите внимание, что здесь используется функция
<b>onLoad()</b>
из примера 13.5):

<b>&lt;iframe id=&quot;editor&quot; src=&quot;about:blank&quot;x/iframe&gt; // Пустой фрейм</b>

<b>  &lt;script&gt;</b>