Клиентский JavaScript предназначен для того, чтобы превращать статические HTML_документы в интерактивные веб_приложения. Работа с содержимым веб_ страниц – это главное предназначение JavaScript. Данная глава является наибо_ лее важной во второй части – здесь рассказывается о том, как это делается.
Каждое окно (или фрейм) веб_броузера отображает HTML_документ. Объект Window, представляющий окно, имеет свойство document, которое ссылается на объект Document. Этот объект Document и является темой обсуждения данной гла_ вы, которая начинается с изучения свойств и методов самого объекта Document. Но эта интересная тема – лишь начало.
Более интересными, чем объект Document, являются объекты, которые представля_ ют содержимое документа. HTML_документы могут содержать текст, изображе_ ния, гиперссылки, элементы форм и т. д. JavaScript_сценарии могут обращаться ко всем объектам, которые представляют элементы документа, и манипулировать ими. Прямой доступ к объектам, представляющим содержимое документа, дает широчайшие возможности, но одновременно означает определенные сложности.
Объектная модель документа (DOM) – это прикладной программный интерфейс (API), определяющий порядок доступа к объектам, из которых состоит доку_ мент. Консорциумом W3C был выработан стандарт DOM, достаточно полно под_ держиваемый всеми современными броузерами. К сожалению, такое положение дел имело место не всегда. В реальности история развития клиентского Java_ Script_программирования – это история развития DOM (причем не всегда в согла_ сованных направлениях). В первые годы существования Всемирной паутины ве_ дущим производителем броузеров была компания Netscape, и именно она опреде_ ляла прикладные интерфейсы для разработки клиентских сценариев. Броузеры Netscape 2 и 3 поддерживали упрощенную версию модели DOM, которая предос_ тавляла возможность доступа только к отдельным элементам, таким как ссылки, изображения и элементы форм. Эта устаревшая спецификация DOM была вос_ принята всеми производителями броузеров и формально включена в стандарт консорциума W3C как DOM Level 0. Данная спецификация до сих пор поддержи_ вается во всех броузерах, а потому мы рассмотрим ее в первую очередь.
15.1. Динамическое содержимое документа
С появлением Internet Explorer 4 доминирование во Всемирной паутине пере_ шло к Microsoft. В броузере IE 4 была реализована совершенно новая объектная модель документа, которая давала возможность обращаться ко всем элементам документа и взаимодействовать с ними довольно интересными способами. Она даже позволяла изменять текст документа за счет перестановки местами абза_ цев, если в этом возникала необходимость. Прикладной интерфейс, разработан_ ный в Microsoft, получил название IE 4 DOM. Однако он так и не был стандарти_ зован, поэтому в IE 5 и более поздних версиях был реализован стандарт W3C DOM, при этом поддержка IE 4 DOM была сохранена. Частично модель IE 4 DOM была реализована в других броузерах и по_прежнему используется во Всемир_ ной паутине. Подробнее эта модель обсуждается в конце главы в сравнении с ее стандартной альтернативой.
В Netscape 4 был выбран совершенно иной подход к реализации DOM, в основе которого лежали динамически позиционируемые программируемые элементы, получившие название слои (layers). Модель Netscape 4 DOM оказалась эволюци_ онным тупиком и поддерживалась только в Netscape 4. При разработке броузеров Mozilla, Firefox и всех остальных, основанных на программном коде Netscape, было решено отказаться от этой модели. В результате модель Netscape 4 DOM в этой редакции книги не рассматривается.
Значительная часть данной главы посвящена описанию стандарта W3C DOM. Следует отметить, что при этом обсуждаются только базовые положения стан_ дарта. Управление содержимым документа – это основная цель клиентского JavaScript_кода, поэтому большинство последующих глав этой книги в действи_ тельности можно рассматривать как продолжение этой главы. В главе 16 рас_ сказывается о стандарте W3C DOM в отношении работы с CSS_стилями и табли_ цами стилей, а в главе 17 – в отношении обработки событий (а также о приемах программирования, унаследованных от IE 4). Глава 18 касается порядка работы с тегами <img> HTML_документа и рассказывает о том, как создавать графиче_ ские изображения на стороне клиента.
В модели DOM Level 0 определяется единственный класс Document, и в этой главе имеются многочисленные неформальные ссылки на объект Document. Однако стан_ дарт W3C DOM определяет универсальный прикладной интерфейс Document, кото_ рый описывает функциональность документа, в равной степени применимую и к HTML_, и к XML_документам, а также специализированный интерфейс HTML_ Document, добавляющий свойства и методы, характерные для HTML_документов. Справочный материал, приводимый в четвертой части книги, следует соглашени_ ям W3C, поэтому если вы ищете свойства HTML_документа, их необходимо ис_ кать в разделе с описанием интерфейса HTMLDocument. Большая часть функциональ_ ных возможностей модели DOM Level 0 относится к HTML_документам, поэтому их описание также следует искать в разделе, посвященном интерфейсу HTMLDocu_ ment, хотя в этой главе они упоминаются как свойства и методы объекта Document.