JavaScript. Подробное руководство, 6-е издание, стр. 201

<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>&lt;embed&gt;.</b>
Свойство
<b>anchors</b>
является нестандартным, но с его помощью можно получить доступ к элементам
<b>&lt;а&gt;,</b>
имеющим атрибут
<b>name</b>
, но не имеющим атрибут
<b>href</b>
. Свойство
<b>scripts</b>
определено стандартом HTML5 и является коллекцией
<b>HTMLCollection</b>
элементов
<b>&lt;script&gt;,</b>
но к моменту написания этих строк оно было реализовано не во всех броузерах.

Кроме того, объект

<b>HTMLDocument</b>
определяет два свойства, каждое из которых ссылается не на коллекцию, а на единственный элемент. Свойство
<b>document.body</b>
представляет элемент
<b>&lt;body&gt;</b>
HTML-документа, а свойство
<b>document.head</b>
- элемент
<b>&lt;head&gt;.</b>
Эти свойства всегда определены в документе: даже если в исходном документе отсутствуют элементы
<b>&lt;head&gt;</b>
и
<b>&lt;body&gt;,</b>
броузер создаст их неявно. Свойство
<b>document.Element</b>
объекта
<b>Document</b>
ссылается на корневой элемент документа. В HTML-документах он всегда представляет элемент
<b>&lt;html&gt;</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; і &lt; document.images.length; i++) // Обойти все изобр.</b>

<b>  document.images[і].style.display = &quot;none&quot;; // ...и скрыть их.</b>

Для объектов

<b>NodeList</b>
и
<b>HTMLCollection</b>
нельзя непосредственно вызывать методы класса
<b>Array</b>
, но их можно вызывать косвенно:

<b>var content = Array.prototype.mар.call(</b>

<b>          document.getElementsByTagName(&quot;p&quot;),</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>&lt;div&gt;,</b>
он вернет объект
<b>NodeList</b>
, свойство
<b>length</b>
которого будет равно 0. Если затем вставить в документ новый элемент
<b>&lt;div&gt;,</b>
этот элемент автоматически станет членом коллекции
<b>NodeList</b>
, а ее свойство
<b>length</b>
станет равно 1.

Обычно такая динамичность элементов

<b>NodeList</b>
и
<b>HTMLCollection</b>
бывает весьма полезна. Однако если добавлять или удалять элементы из документа в процессе итераций по коллекции
<b>NodeList</b>
, потребуется предварительно создать статическую копию объекта
<b>NodeList</b>
: