Получение выделения в 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". Он определяет то, что строка должна снова сравниваться с регулярным выражением многократно, если образец найден более одного раза. Результирующая строка отображается после замены всех последовательностей пяти пробелов пустой строкой.
