Иногда удобно иметь возможность определять, какой участок текста документа выделен пользователем. Хотя эта область слабо стандартизована, тем не менее возможность получать выделенный текст поддерживается во всех современных броузерах. В примере 15.12 показано, как это делается.
Пример 15.12. Получение выделенного текста
function getSelectedText() { if (window.getSelection) {
// Этот прием, скорее всего, будет стандартизирован.
// getSelection() возвращает объект Selection,
// который в этой книге не описывается.
return window.getSelection().toString();
}
else if (document.getSelection) {
// Это более старый простейший прием, который возвращает строку return document.getSelection( );
}
else if (document.selection) {
// Этот прием используется в IE. В этой книге не описываются
// ни свойство selection, ни объект TextRange, присутствующие в IE. return document.selection.createRange().text;
}
}
Программный код этого примера можно только принять на веру. Объекты Selec_ tion и TextRange, используемые в примере, в данной книге не рассматриваются. Просто на момент написания этих строк их прикладной интерфейс (API) был слишком сложен и к тому же не стандартизован. Однако сама операция получе_ ния выделенного текста настолько проста и востребована, что определенно есть смысл проиллюстрировать ее. Она может использоваться, например, в букмарк_ летах (см. раздел 13.4.1), для организации поиска выделенного текста в поиско_ вых системах или на сайте. Так, следующая HTML_ссылка пытается отыскать выделенный фрагмент текста в виртуальной энциклопедии (Wikipedia). Если поместить в закладку эту ссылку и URL_адрес со спецификаторм javascript:, за_ кладка превратится в букмарклет:
<a href="javascript: var q;
if (window.getSelection) q = window.getSelection().toString(); else if (document.getSelection) q = document.getSelection();
else if (document.selection) q = document.selection.createRange().text; void window.open('http://en.wikipedia.org/wiki/' + q);
">
Найти выделенный текст в Wikipedia </a>
15.11. IE 4 DOM
В примере 15.12 есть одна неточность. Метод getSelection()
объектов Window
и Document не возвращает выделенный текст, если он находится внутри элемен_ тов формы <input> или <textarea>: он возвращает только тот текст, который выде_ лен в теле самого документа. В то же время свойство document.selection в IE воз_ вращает текст, выделенный в любом месте документа.
В Firefox элементы ввода текста определяют свойства selectionStart и selection_ End, которые могут использоваться для получения выделенного текста или для выделения фрагментов текста. Например:
function getTextFieldSelection(e) {
if (e.selectionStart != undefined && e.selectionEnd != undefined) { var start = e.selectionStart;
var end = e.selectionEnd;
return e.value.substring(start, end);
}
else return ""; // Не поддерживается данным броузером