|  |  |  | 
Объектная 
  модель документа (DOM)
  
 А 
  теперь настало время поговорить о классах и объектах Web-обозревателя подробнее.
  
 Давайте 
  посмотрим на какую-нибудь Web-страницу. Что она собой представляет? Фактически, 
  иерархию элементов. Мельчайшие элементы страницы, например текстовые абзацы, 
  являются потомками более крупных и сложных элементов, например, свободно позиционируемых 
  элементов. Свободные элементы, в свою очередь, могут находиться в других свободных 
  элементах или непосредственно в самой странице. Получается весьма сложная многоуровневая 
  структура, в которой одни элементы зависят от других.
  
 Описать 
  такую структуру можно с помощью объектов. Точнее, сложной иерархии объектов, 
  вложенных друг в друга и зависящих друг от друга. Такая структура называется 
  объектной моделью документа (Document Object Model, DOM). Все современные программы 
  Web-обозревателей представляют Web-страницу как иерархический набор объектов.
  
 Какое 
  преимущество дает пользователям такой подход? Никакого. Все это рассчитано только 
  на программистов, разрабатывающих Web-сценарии.
  
 Каждый 
  из объектов, из которых состоит Web-страница, имеет набор свойств, предоставляющих 
  доступ к значениям различных атрибутов соответствующего тега, методов, с помощью 
  которых этим объектом можно манипулировать, и событий, которые могут в этом 
  объекте происходить и которые можно обрабатывать. Это позволяет управлять практически 
  любым элементом страницы, самой страницей и даже самим Web-обозревателем, используя 
  специально написанные Web-сценарии.
  
 Например, 
  именно таким образом на Web-странице создаются анимирован-ные элементы (см. 
  главу 12). Также с помощью сценариев можно изменять цвета, параметры шрифта 
  и даже само содержимое элементов страницы. Более того, так можно управлять и 
  самим Web-обозревателем: открывать и закрывать вспомогательные окна, перемещаться 
  взад-вперед по списку "истории" и даже принудительно загружать нужные 
  Web-страницы без участия пользователя.
  
 Неужели 
  вы думали, что Web-программисты пройдут мимо такой возможности! Если вы думаете, 
  что пройдут, — вы плохо их знаете. Вспомните, например, что говорилось в предыдущей 
  главе об анимации. Едва появилась возможность немного подвигать по странице 
  тем или иным рисунком, как Web-программисты эту возможность реализовали. А сейчас 
  анимацию поддерживают даже Web-редакторы, и Dreamweaver тому пример.
  
 Но 
  хватит говорить на отвлеченные темы! Давайте все-таки займемся объектной моделью 
  документа.
  
 Сначала 
  выясним, каким образом можно получить доступ к нужному элементу. Для этого ему 
  необходимо дать уникальное имя. Делается это с помощью атрибута ID или NAME. 
  Атрибут ID поддерживается практически всеми тегами HTML, атрибут NAME — только 
  некоторыми. К тегам, поддерживающим этот атрибут, относятся формы, элементы 
  управления, фреймы, гиперссылки и некоторые другие.
  
 Но 
  почему же нельзя пользоваться только атрибутом ID? Все дело в проклятой несовместимости 
  Navigator 4.x и интернет-стандартов. Старые версии Navigator используют атрибут 
  ID только для присвоения элементам стилей, а для задания имен признают только 
  атрибут NAME. Видите, какая морока!..
  
 Дав 
  с помощью атрибутов ID или NAME элементу страницы уникальное имя. вы можете 
  обращаться к нему из сценария, вызывая его методы и свойства. Интерпретатор 
  сам найдет нужный элемент по его имени. Для доступа к элементу страницы в Internet 
  Explorer используется синтаксис:
  
 <Имя 
  элемента, заданное в атрибутах ID или NAME>.<Свойство или метод>
  
 Если 
  же вы пишете сценарий для Navigator 4.x, делайте так:
  
 document["<Имя 
  элемента, заданное в атрибуте NAME>"].<Свойство или метод>
  
 Давайте 
  приведем небольшой пример, поясняющий вышесказанное.
  
 <Р 
  ID="para" STYLE="color: #0000FF">Некий текст.</Р>
  
 Сначала 
  мы создали текстовый абзац, назвали его para (обратите внимание на значение 
  атрибута ID) и присвоили ему встроенный стиль, задающий цвет текста. Сейчас 
  мы этот цвет текста изменим, воспользовавшись Web-сценарием.
  
 para.style.color 
  = "#FF0000";
  
 Здесь 
  нужны дополнительные пояснения. Дело в том, что каждый элемент страницы в объектной 
  модели документа имеет внутренний объект style, дающий доступ к его встроенному 
  стилю. Обратиться к этому объекту можно через одноименное свойство, что мы и 
  сделали. А уж объект style предоставляет доступ ко всем атрибутам встроенного 
  стиля через одноименные свойства. В данном примере для получения доступа к значению 
  атрибута стиля color использовалось свойство color.
  
 Вы 
  можете изменить выравнивание текста этого абзаца, обратившись к свойству align:
  
 para. 
  align = "center";
  
 Свойство 
  align предоставляет доступ к значению атрибута ALIGN тега <р>.
  
 К 
  несчастью, вышеприведенный пример будет работать только в самых последних программах 
  Web-обозревателей. Пресловутый Navigator 4.x не позволяет изменять внешний вид 
  и содержимое элементов страницы после ее загрузки. Исключение составляют только 
  графические изображения, фреймы и слои.
  
 А 
  вот этот код будет работать везде:
  
 <IMG 
  NAME=" some Image" SRC="image1.gif ">
  
 document 
  ["someImage"] .src = "image2.gif";
  
 Он 
  меняет файл, содержимое которого отображается в элементе графического изображения, 
  на другой. Для этого он присваивает иное значение свойству src объекта somelmage, 
  предоставляющее доступ к атрибуту SRC тега
  
 <IMG>.
  
 Чтобы 
  получить доступ к самой Web-странице, воспользуйтесь системным объектом document. 
  В частности, вы можете задать цвет гиперссылок, воспользовавшись свойством linkColor, 
  предоставляющим доступ к значению атрибута LINK тега <BODY>:
  
 document.linkColor 
  = "#FF0000";
  
 Оба 
  рассмотренных нами объекта представляют собой соответственно видимый элемент 
  страницы и саму страницу. Оба этих объекта были созданы с помощью тегов HTML. 
  Теперь же мы начнем рассмотрение объектов, не являющихся элементами страницы. 
  Это объекты Web-обозревателя, не видимые пользователю.
  
 Объект 
  document имеет внутренний объект location, предоставляющий доступ к интернет-адресу 
  страницы и различным его частям. Доступен он через одноименное свойство. Воспользовавшись 
  этим объектом, мы можем узнать, с какого интернет-адреса была загружена данная 
  страница:
  
 address 
  = document.location.href;
  
 выяснить 
  имя файла этой страницы:
  
 filename 
  = document.location.pathname;
  
 либо 
  загрузить другую страницу:
  
 document.location.href 
  = "http://www.othersite.ru/otherpage.htm";
  
 Объект 
  window представляет текущее окно Web-обозревателя либо текущий фрейм, если страница 
  загружена во фрейме. С помощью этого объекта вы можете, например, закрыть это 
  окно:
  
 window.close();
  
 или 
  заменить текст, отображаемый в его строке статуса:
  
 window.status 
  = "Сейчас работает Web-сценарий!";
  
 Объект 
  window имеет внутренний объект navigator, предоставляющий доступ к самой программе 
  Web-обозревателя. Доступен он через одноименное свойство. Воспользовавшись этим 
  объектом, мы можем выяснить, например, версию программы:
  
 version 
  = window.navigator.appVersion; или название:
  
 programName 
  = window.navigator.appName;
  
 Объект 
  window имеет внутренний объект history, предоставляющий доступ к списку "истории" 
  Web-обозревателя. Он доступен также через одноименное свойство. Воспользовавшись 
  этим объектом, мы можем "путешествовать" по списку "истории" 
  вперед:
  
 window.history.forward();
  
 и 
  назад:
  
 window.history.back();
  
В объектной модели документа существует также еще несколько других объектов, но рассматриваться они не будут. Эти объекты применяются достаточно редко и в весьма специфических случаях. Если же вы все-таки захотите узнать побольше об объектной модели документа, обратитесь к соответствующей литературе.
|  |  |  |