|
| 1 | + |
1 | 2 | # Свойства узлов: тип, тег и содержимое |
2 | 3 |
|
3 | 4 | Теперь давайте более внимательно взглянем на DOM-узлы. |
|
18 | 19 |
|
19 | 20 | Существуют следующие классы: |
20 | 21 |
|
21 | | -- [EventTarget](https://dom.spec.whatwg.org/#eventtarget) -- это корневой "абстрактный" класс. Объекты этого класса никогда не создаются. Он служит основой, благодаря которой все DOM-узлы поддерживают так называемые "события", о которых мы поговорим позже. |
22 | | -- [Node](https://dom.spec.whatwg.org/#interface-node) -- также является "абстрактным" классом, и служит основой для DOM-узлов. Он обеспечивает базовую функциональность: `parentNode`, `nextSibling`, `childNodes` и т.д. (это геттеры). Объекты класса `Node` никогда не создаются. Но есть определённые классы узлов, которые наследуют от него: `Text` -- для текстовых узлов, `Element` -- для узлов-элементов и более экзотический `Comment` -- для узлов-комментариев. |
23 | | -- [Element](https://dom.spec.whatwg.org/#interface-element) -- это базовый класс для DOM-элементов. Он обеспечивает навигацию на уровне элементов: `nextElementSibling`, `children` и методы поиска: `getElementsByTagName`, `querySelector`. Браузер поддерживает не только HTML, но также XML и SVG. Класс Element служит базой для следующих классов: `SVGElement`, `XMLElement` и `HTMLElement`. |
24 | | -- [HTMLElement](https://html.spec.whatwg.org/multipage/dom.html#htmlelement) -- является базовым классом для всех остальных HTML-элементов. От него наследуют конкретные элементы: |
| 22 | +- [EventTarget](https://dom.spec.whatwg.org/#eventtarget) -- это корневой "абстрактный" класс для всего. |
| 23 | + |
| 24 | + Объекты этого класса никогда не создаются. Он служит основой, благодаря которой все DOM-узлы поддерживают так называемые "события", о которых мы поговорим позже. |
| 25 | + |
| 26 | +- [Node](https://dom.spec.whatwg.org/#interface-node) -- также является "абстрактным" классом, и служит основой для DOM-узлов. |
| 27 | + |
| 28 | + Он обеспечивает базовую функциональность: `parentNode`, `nextSibling`, `childNodes` и т.д. (это геттеры). Объекты класса `Node` никогда не создаются. Но есть определённые классы узлов, которые наследуются от него (и следовательно наследуют функционал `Node`). |
| 29 | + |
| 30 | +- [Document](https://dom.spec.whatwg.org/#interface-document), по историческим причинам часто наследуется `HTMLDocument` (хотя последняя спецификация этого не навязывает) -- это документ в целом. |
| 31 | + |
| 32 | + Глобальный объект `document` принадлежит именно к этому классу. Он служит точкой входа в DOM. |
| 33 | + |
| 34 | +- [CharacterData](https://dom.spec.whatwg.org/#interface-characterdata) -- "абстрактный" класс. Вот, кем он наследуется: |
| 35 | + - [Text](https://dom.spec.whatwg.org/#interface-text) -- класс, соответствующий тексту внутри элементов. Например, `Hello` в `<p>Hello</p>`. |
| 36 | + - [Comment](https://dom.spec.whatwg.org/#interface-comment) -- класс для комментариев. Они не отображаются, но каждый комментарий становится членом DOM. |
| 37 | + |
| 38 | +- [Element](https://dom.spec.whatwg.org/#interface-element) -- это базовый класс для DOM-элементов. |
| 39 | + |
| 40 | + Он обеспечивает навигацию на уровне элементов: `nextElementSibling`, `children`. |
| 41 | + А также и методы поиска элементов: `getElementsByTagName`, `querySelector`. |
| 42 | + |
| 43 | + Браузер поддерживает не только HTML, но также XML и SVG. Таким образом, класс `Element` служит основой для более специфичных классов: `SVGElement`, `XmlElement` (они нам здесь не нужны) и `HTMLElement`. |
| 44 | + |
| 45 | +- И наконец, [HTMLElement](https://html.spec.whatwg.org/multipage/dom.html#htmlelement) является базовым классом для всех остальных HTML-элементов. Мы будем работать с ним большую часть времени. |
| 46 | + |
| 47 | + От него наследуются конкретные элементы: |
| 48 | + |
25 | 49 | - [HTMLInputElement](https://html.spec.whatwg.org/multipage/forms.html#htmlinputelement) -- класс для тега `<input>`, |
26 | 50 | - [HTMLBodyElement](https://html.spec.whatwg.org/multipage/semantics.html#htmlbodyelement) -- класс для тега `<body>`, |
27 | 51 | - [HTMLAnchorElement](https://html.spec.whatwg.org/multipage/semantics.html#htmlanchorelement) -- класс для тега `<a>`, |
28 | | - - ...и т.д, каждому тегу соответствует свой класс, который предоставляет определённые свойства и методы. |
| 52 | + - ...и т.д. |
| 53 | + |
| 54 | +Также существует множество других тегов со своими собственными классами, которые могут иметь определенные свойства и методы, в то время как некоторые элементы, такие как `<span>`, `<section>` и `<article>`, не имеют каких-либо определенных свойств, поэтому они являются экземплярами класса `HTMLElement`. |
29 | 55 |
|
30 | | -Таким образом, полный набор свойств и методов данного узла собирается в результате наследования. |
| 56 | +Таким образом, полный набор свойств и методов данного узла является результатом цепочки наследования. |
31 | 57 |
|
32 | 58 | Рассмотрим DOM-объект для тега `<input>`. Он принадлежит классу [HTMLInputElement](https://html.spec.whatwg.org/multipage/forms.html#htmlinputelement). |
33 | 59 |
|
@@ -131,10 +157,10 @@ interface HTMLInputElement: HTMLElement { |
131 | 157 | <script> |
132 | 158 | let elem = document.body; |
133 | 159 |
|
134 | | - // посмотрим что это? |
| 160 | + // давайте разберёмся: какой тип узла находится в elem? |
135 | 161 | alert(elem.nodeType); // 1 => элемент |
136 | 162 |
|
137 | | - // и первый потомок... |
| 163 | + // и его первый потомок... |
138 | 164 | alert(elem.firstChild.nodeType); // 3 => текст |
139 | 165 |
|
140 | 166 | // для объекта document значение типа -- 9 |
|
0 commit comments