Получение выделения в Navigator 4.0x.
Navigator 4.0x поддерживает метод getSelection() объекта document. Этот метод возвращает строку, содержащую текст текущего выделения. Обычно вызывается так:
document.getSelection()Следующий пример показывает, как работает метод getSelection()
FORM NAME="myForm"> <TEXTAREA NAME="myArea" COLS="40" ROWS="4"></TEXTAREA> </FORM> <SCRIPT LANGUAGE="JavaScript"> <!-- function display() { if (!document.getSelection) return; var str = document.getSelection(); document.myForm.myArea.value = str; } if (window.Event) document.captureEvents(Event.MOUSEUP); document.onmouseup = display; // --> </SCRIPT>
Скрипт отображает текущее выделение в поле ввода. В начале, он указывает браузеру захватывать все события onmouseup. Этот способ работает только в Navigator 4.0x, поэтому, перед вызовом выражения, простое определение объекта удостоверяется в наличии браузера Navigator 4.0x,.
Функция срабатывающая на событие сначала присваивает выделенный текст переменной под названием str. И когда свойству value элемента формы присваивается переменная, выделение отображается в поле ввода. Теперь выделите мышью некоторый текст. И если вы используете Navigator 4.0x, выделение незамедлительно отобразится в поле ввода.
Выражение:
if (!document.getSelection) return;
прерывает выполнение функции, если у пользователя запущен браузер, который не поддерживает метод getSelection() объекта document.
Обратите внимание как формат документа повлиял на значение возвращенную методом getSelection(). Например, эта страница использует пару <BLOCKQUOTE>... </BLOCKQUOTE> для отступа содержимого, что облегчает чтение. Если вы выбираете некоторые строки текста, вторую (или третью, четвертую, пятую и т.д.), то текст строки отступает, из-за использования <BLOCKQUOTE>. В этом случае, новая строка состоит из возврата каретки (\r), перевода строки (\n), и пяти пробелов. Вы можете определить какие символы переносят строку отобразив значение строки с помощью функции escape().
alert(escape(str));
Функция escape() получает в качестве аргумента строку и возвращает эту же строку с замененными нетекстовыми символами на их эквивалент в шестнадцатеричной системе исчисления.
С помощью регулярных выражений вы можете легко отделаться от ненужных символов. В нашем примере, комбинация \r\n платформо-зависимая, поэтому мы просто удалим пять пробелов, которые следуют после нее. Вот альтернативный скрипт:
<SCRIPT LANGUAGE="JavaScript"> <!-- function display() { if (!document.getSelection) return; var str = document.getSelection(); if (window.RegExp) { var regstr = unescape("%20%20%20%20%20"); var regexp = new RegExp(regstr, "g"); str = str.replace(regexp, ""); } document.myForm.myArea.value = str; } if (window.Event) document.captureEvents(Event.MOUSEUP); document.onmouseup = display; // --> </SCRIPT>
Сначала мы определили какая серия символов вызвала проблему, отображая значение возвращенное функцией escape(), как показано выше. Мы немедленно обратили внимание на последовательность из пяти нетекстовых символов: %20%20%20%20%20
Поэтому, функция unescape() преобразовывает эти символы и присваивает это значение переменной. Регулярное выражение определено как объект RegExp. Обратите внимание на аргумент "g". Он определяет то, что строка должна снова сравниваться с регулярным выражением многократно, если образец найден более одного раза. Результирующая строка отображается после замены всех последовательностей пяти пробелов пустой строкой.