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