Объект document является важнейшим свойством объекта window (т.е. полностью к нему нужно обращаться как window.document ). Все элементы HTML-разметки, присутствующие на web-странице, - текст, абзацы, гиперссылки, картинки, списки, таблицы, формы и т.д. - являются свойствами объекта document. Можно сказать, что технология DHTML (Dynamic HTML), т.е. динамическое изменение содержимого web-страницы, заключается именно в работе со свойствами, методами и событиями объекта document (не считая работы с окнами и фреймами).
Таблица 4.4. Свойства, методы и события объектаdocument
Свойства
Методы
События
URL
domain
title
lastModified
referrer
cookie
linkColor
alinkColor
vlinkColor
Помимо перечисленных в этой таблице свойств, объект document имеет свойства, являющиеся коллекциями (форм, картинок, ссылок и т.п.); таблица 3.1 содержит их описание. Кроме того, можно формировать требуемые коллекции "на лету" с помощью указанных выше методов. Так,document.getElementsByTagName('P') есть коллекция всех HTML-элементов (точнее, соответствующих им объектов) вида <P>, т.е. абзацев. Аналогично,document.getElementsByName('important') выдаст коллекцию (объектов) HTML-элементов любых типов, у которых был задан атрибут NAME="important". Наконец, document.getElementById('id5') выдаст тот HTML-элемент (если их несколько, то первый), у которого был задан атрибут ID="id5".
С одним методом мы уже часто работали: document.write() - он пишет в текущий HTML-документ. Его модификация document.writeln() делает то же самое, но дополнительно добавляет в конце символ новой строки; это удобно, если потом требуется читать сгенерированный HTML-документ глазами. Если запись идет в HTML-документ нового окна, открытого с помощью window.open(), то перед записью в него нужно открыть поток на запись с помощью методаdocument.open(), а по окончании записи закрыть поток методомdocument.close(). После выполнения последнего действия произойдет событиеLoad (и вызовется соответствующий обработчик события onLoad ) у документа, а затем у окна.
События объекта document аналогичны одноименным событиям объекта window(только у document они происходят раньше), либо их смысл понятен из их названия, поэтому мы не будем детально их разбирать.
Остановимся вкратце на свойствах объекта document. Свойства linkColor,alinkColor и vlinkColor задают цвет гиперссылок - непосещенных, активных и посещенных, соответственно. Свойство URL хранит адрес текущего документа (т.е. строковый литерал, равный window.location.href, если страница состоит из единственного документа, а не является набором фреймов). Свойство domainвыдает домен (оно аналогично window.location.hostname ). Свойство titleвыдает заголовок страницы (указанный в контейнере <TITLE> ), lastModifiedуказывает на дату и время последней модификации файла, в котором содержится данный HTML-документ (без учета времени модификации внешних файлов - стилевых, скриптов и т.п.). Свойство referrer выдает адрес страницы, с которой пользователь пришел на данную web-страницу, кликнув по гиперссылке. Наконец, свойству cookie посвящен целый раздел в лекции 8.
Фреймы (Frames)
Фреймы - это несколько видоизмененные окна. Отличаются они от обычных окон тем, что размещаются внутри них. У фрейма не может быть ни панели инструментов, ни меню, как в обычном окне. В качестве поля статуса фрейм использует поле статуса окна, в котором он размещен. Существует и ряд других отличий.
Если окно имеет фреймовую структуру (т.е. вместо контейнера <BODY> в нем присутствует контейнер<FRAMESET> со вложенными в него контейнерами <FRAME> и быть может другими контейнерами <FRAMESET> ), то объектwindow соответствует внешнему контейнеру <FRAMESET>, а с каждым вложенным контейнером <FRAME> ассоциирован свой собственный объект класса Window.
Каждому окну или фрейму создатель страницы может датьимя - с помощью атрибута NAME контейнера FRAME, либо вторым аргументом метода window.open(). Используется оно в качестве значения атрибута TARGET контейнеров A иFORM, чтобы открыть ссылку или отобразить результаты работы формы в определенном окне или фрейме. Есть несколько зарезервированных имен окон: _self (имя текущего окна или фрейма, где исполняется скрипт),_blank (новое окно), _parent (окно-родитель для данного фрейма), _top (самый старший предок данного фрейма, т.е. окно браузера, частью которого является данный фрейм). Иерархия фреймов, обсуждаемая ниже, как раз и задает, какие окна или фреймы являются родителями для других фреймов.
У каждого объекта класса Window, будь то окно или фрейм, есть также ссылка на соответствующий объект. Как мы знаем, ссылкой на объект текущего окна, в котором исполняется скрипт, является window ; кроме того, на него же ссылается свойство self объектаwindow (а также свойство window объекта window - есть и такое!). Ссылку на объект окна, открываемого методом window.open(), выдает сам этот метод. Ссылка на объект-фрейм совпадает с его именем, заданным с помощью атрибута NAME контейнера FRAME. Наконец, у объектов-фреймов есть специальные свойства, дающие ссылки на родительский фрейм (window.parent ) и на окно браузера, частью которого является данный фрейм ( window.top ).
Таким образом, для того, чтобы правильно обращаться к нужным фреймам, нам нужно знать лишь их иерархию, т.е. взаимное подчинение (какой фрейм для какого является родителем). Это мы сейчас и обсудим.