<b>document.shipping_address</b>
С помощью свойства
<b>document.forms</b>
обращение к форме, имеющей атрибут
<b>name</b>
(или
<b>id</b>
), можно записать более явно:
<b>document.fоrms.shipping_address;</b>
Объект
<b>HTMLDocument</b>
также определяет свойства-синонимы
<b>embeds</b>
и
<b>plugins</b>
, являющиеся коллекциями
<b>HTMLCollection</b>
элементов
<b><embed>.</b>
Свойство
<b>anchors</b>
является нестандартным, но с его помощью можно получить доступ к элементам
<b><а>,</b>
имеющим атрибут
<b>name</b>
, но не имеющим атрибут
<b>href</b>
. Свойство
<b>scripts</b>
определено стандартом HTML5 и является коллекцией
<b>HTMLCollection</b>
элементов
<b><script>,</b>
но к моменту написания этих строк оно было реализовано не во всех броузерах.
Кроме того, объект
<b>HTMLDocument</b>
определяет два свойства, каждое из которых ссылается не на коллекцию, а на единственный элемент. Свойство
<b>document.body</b>
представляет элемент
<b><body></b>
HTML-документа, а свойство
<b>document.head</b>
- элемент
<b><head>.</b>
Эти свойства всегда определены в документе: даже если в исходном документе отсутствуют элементы
<b><head></b>
и
<b><body>,</b>
броузер создаст их неявно. Свойство
<b>document.Element</b>
объекта
<b>Document</b>
ссылается на корневой элемент документа. В HTML-документах он всегда представляет элемент
<b><html></b>
.
Объекты NodeList и HTMLCollection
Методы
<b>getElementsByName()</b>
и
<b>getElementsByTagName()</b>
возвращают объекты
<b>NodeList</b>
, а такие свойства, как
<b>document.images</b>
и
<b>document.forms</b>
, являются объектами
<b>HTMLCollection</b>
.
Эти объекты являются объектами, подобными массивам, доступным только для чтения (раздел 7.11). Они имеют свойство
<b>length</b>
и могут индексироваться (только для чтения) подобно настоящим массивам. Содержимое объекта
<b>NodeList</b>
или
<b>HTMLCollection</b>
можно обойти с помощью стандартного цикла, например:
<b>for(var і = 0; і < document.images.length; i++) // Обойти все изобр.</b>
<b> document.images[і].style.display = "none"; // ...и скрыть их.</b>
Для объектов
<b>NodeList</b>
и
<b>HTMLCollection</b>
нельзя непосредственно вызывать методы класса
<b>Array</b>
, но их можно вызывать косвенно:
<b>var content = Array.prototype.mар.call(</b>
<b> document.getElementsByTagName("p"),</b>
<b> function(e) { return e.innerHTML; });</b>
Объекты
<b>HTMLCollection</b>
могут иметь дополнительные именованные свойства и могут индексироваться не только числами, но и строками.
По историческим причинам оба объекта,
<b>NodeList</b>
и
<b>HTMLCollection</b>
, могут также играть роль функций: вызов их с числовым или строковым аргументом равносилен операции индексирования числом или строкой. Однако использование этой причудливой особенности может сбивать с толку.
Интерфейсы обоих объектов,
<b>NodeList</b>
и
<b>HTMLCollection</b>
, проектировались под другие языки программирования, не такие динамические, как JavaScript. Оба определяют метод
<b>item().</b>
Он принимает целое число и возвращает элемент с этим индексом. Однако в программах на языке JavaScript нет нужды использовать этот метод, так как можно использовать простую операцию индексирования массива. Аналогично
<b>HTMLCollection</b>
определяет метод
<b>namedltem(),</b>
возвращающий значение именованного свойства, но в программах на языке JavaScript вместо него можно использовать операции индексирования массива и обращения к свойствам.
Одна из наиболее важных и интересных особенностей объектов
<b>NodeList</b>
и
<b>HTMLCollection</b>
состоит в том, что они не являются статическими слепками документа, а продолжают «жить», и списки элементов, которые они представляют, изменяются по мере изменения документа. Если вызвать метод
<b>getElementsByTagName('div')</b>
для документа, в котором отсутствуют элементы
<b><div>,</b>
он вернет объект
<b>NodeList</b>
, свойство
<b>length</b>
которого будет равно 0. Если затем вставить в документ новый элемент
<b><div>,</b>
этот элемент автоматически станет членом коллекции
<b>NodeList</b>
, а ее свойство
<b>length</b>
станет равно 1.
Обычно такая динамичность элементов
<b>NodeList</b>
и
<b>HTMLCollection</b>
бывает весьма полезна. Однако если добавлять или удалять элементы из документа в процессе итераций по коллекции
<b>NodeList</b>
, потребуется предварительно создать статическую копию объекта
<b>NodeList</b>
: