Чтение онлайн

на главную - закладки

Жанры

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

15.10.3. Получение выделенного текста

Иногда удобно иметь возможность определять, какой участок текста документа выделен пользователем. Сделать это можно, как показано ниже:

function getSelectedText {

if (window.getSelection) // Функция, определяемая стандартом HTML5

return window.getSelection.toString;

else

if (document.selection) // Прием, характерный для IE.

return document.selection.createRange.text;

}

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

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

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

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

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

<а href="#"text_code"> if (window.getSelection)

q = window.getSelection.toString;

else

if (document.selection)

q = document.selection.createRange.text;

void window.open(' http://ru.wikipedia.org/wiki/' + q);">

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

</а>

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

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

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

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

elt.value.substring(elt.selectionStart, elt.selectionEnd);

Свойства

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

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

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

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

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

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

<div id="editor" contenteditable>

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

</div>

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

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

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

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

Поделиться:
Популярные книги

Ты - наша

Зайцева Мария
1. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Ты - наша

Тактик

Земляной Андрей Борисович
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
Тактик

Товарищ "Чума" 9

lanpirot
9. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Товарищ Чума 9

Я уже князь. Книга XIX

Дрейк Сириус
19. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я уже князь. Книга XIX

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.62
рейтинг книги
Последний реанорец. Том I и Том II

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик

КАМЕРГЕРСКИЙ ПЕРЕУЛОК

Орлов Владимир Викторович
Фантастика:
фэнтези
6.00
рейтинг книги
КАМЕРГЕРСКИЙ ПЕРЕУЛОК

Наследие Маозари

Панежин Евгений
1. Наследие Маозари
Фантастика:
рпг
попаданцы
аниме
5.80
рейтинг книги
Наследие Маозари

Законник Российской Империи. Том 2

Ткачев Андрей Юрьевич
2. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
дорама
6.40
рейтинг книги
Законник Российской Империи. Том 2

Linux программирование в примерах

Роббинс Арнольд
Компьютеры и Интернет:
программирование
ос и сети
5.00
рейтинг книги
Linux программирование в примерах

Князь Целитель 3

Ткачев Андрей Юрьевич
3. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Князь Целитель 3

Пламенев. Книга 3-7

Карелин Сергей Витальевич
Пламенев
Фантастика:
аниме
уся
фэнтези
сянься
5.00
рейтинг книги
Пламенев. Книга 3-7

Неучтенный элемент. Том 11

NikL
11. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 11

Старый, но крепкий 5

Крынов Макс
5. Культивация без насилия
Фантастика:
рпг
аниме
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 5