You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 2-ui/1-document/02-dom-nodes/article.md
+23-23
Original file line number
Diff line number
Diff line change
@@ -6,13 +6,13 @@ libs:
6
6
7
7
# DOM tree
8
8
9
-
The backbone of an HTML document are tags.
9
+
The backbone of an HTML document is tags.
10
10
11
-
According to Document Object Model (DOM), every HTML-tag is an object. Nested tags are "children" of the enclosing one. The text inside a tag it is an object as well.
11
+
According to the Document Object Model (DOM), every HTMLtag is an object. Nested tags are "children" of the enclosing one. The text inside a tag is an object as well.
12
12
13
-
All these objects are accessible using JavaScript, we can use them to modify the page.
13
+
All these objects are accessible using JavaScript, and we can use them to modify the page.
14
14
15
-
For example, `document.body` is the object representing `<body>` tag.
15
+
For example, `document.body` is the object representing the `<body>` tag.
16
16
17
17
Running this code will make the `<body>` red for 3 seconds:
18
18
@@ -22,11 +22,11 @@ document.body.style.background = 'red'; // make the background red
22
22
setTimeout(() =>document.body.style.background='', 3000); // return back
23
23
```
24
24
25
-
That was just a glimpse of DOM power. Soon we'll learn more ways to manipulate DOM, but first we need to know about its structure.
25
+
That was just a glimpse of the DOM's power. Soon we'll learn more ways to manipulate the DOM, but first we need to know about its structure.
26
26
27
-
## An example of DOM
27
+
## An example of the DOM
28
28
29
-
Let's start with the following simple docment:
29
+
Let's start with the following simple document:
30
30
31
31
```html run no-beautify
32
32
<!DOCTYPE HTML>
@@ -56,7 +56,7 @@ On the picture above, you can click on element nodes and their children will ope
56
56
57
57
Every tree node is an object.
58
58
59
-
Tags are *element nodes* (or just elements), they form the tree structure: `<html>` is at the root, then `<head>` and `<body>` are its children, etc.
59
+
Tags are *element nodes* (or just elements) and form the tree structure: `<html>` is at the root, then `<head>` and `<body>` are its children, etc.
60
60
61
61
The text inside elements forms *text nodes*, labelled as `#text`. A text node contains only a string. It may not have children and is always a leaf of the tree.
62
62
@@ -67,13 +67,13 @@ Please note the special characters in text nodes:
67
67
- a newline: `↵` (in JavaScript known as `\n`)
68
68
- a space: `␣`
69
69
70
-
Spaces and newlines -- are totally valid characters, like letters and digits. They form text nodes and become a part of the DOM. So, for instance, in the example above the `<head>` tag contains some spaces before `<title>`, and that text becomes a `#text` node (it contains a newline and some spaces only).
70
+
Spaces and newlines are totally valid characters, like letters and digits. They form text nodes and become a part of the DOM. So, for instance, in the example above the `<head>` tag contains some spaces before `<title>`, and that text becomes a `#text` node (it contains a newline and some spaces only).
71
71
72
72
There are only two top-level exclusions:
73
-
1. Spaces and newlines before `<head>` are ignored for historical reasons,
74
-
2. If we put something after `</body>`, then that is automatically moved inside the `body`, at the end, as the HTML spec requires that all content must be inside `<body>`. So there may be no spaces after `</body>`.
73
+
1. Spaces and newlines before `<head>` are ignored for historical reasons.
74
+
2. If we put something after `</body>`, then that is automatically moved inside the `body`, at the end, as the HTML spec requires that all content must be inside `<body>`. So there can't be any spaces after `</body>`.
75
75
76
-
In other cases everything's straightforward -- if there are spaces (just like any character) in the document, then they become text nodes in DOM, and if we remove them, then there won't be any.
76
+
In other cases everything's straightforward -- if there are spaces (just like any character) in the document, then they become text nodes in the DOM, and if we remove them, then there won't be any.
77
77
78
78
Here are no space-only text nodes:
79
79
@@ -100,11 +100,11 @@ On further DOM pictures we'll sometimes omit them when they are irrelevant. Such
100
100
101
101
## Autocorrection
102
102
103
-
If the browser encounters malformed HTML, it automatically corrects it when making DOM.
103
+
If the browser encounters malformed HTML, it automatically corrects it when making the DOM.
104
104
105
-
For instance, the top tag is always `<html>`. Even if it doesn't exist in the document -- it will exist in the DOM, the browser will create it. The same goes for `<body>`.
105
+
For instance, the top tag is always `<html>`. Even if it doesn't exist in the document, it will exist in the DOM, because the browser will create it. The same goes for `<body>`.
106
106
107
-
As an example, if the HTML file is a single word `"Hello"`, the browser will wrap it into `<html>` and `<body>`, add the required `<head>`, and the DOM will be:
107
+
As an example, if the HTML file is the single word `"Hello"`, the browser will wrap it into `<html>` and `<body>`, and add the required `<head>`, and the DOM will be:
An interesting "special case" is tables. By the DOM specification they must have `<tbody>`, but HTML text may (officially) omit it. Then the browser creates `<tbody>` in DOM automatically.
140
+
An interesting "special case" is tables. By the DOM specification they must have `<tbody>`, but HTML text may (officially) omit it. Then the browser creates `<tbody>` in the DOM automatically.
141
141
142
142
For the HTML:
143
143
@@ -202,15 +202,15 @@ There are [12 node types](https://dom.spec.whatwg.org/#node). In practice we usu
202
202
1. `document` -- the "entry point" into DOM.
203
203
2. element nodes -- HTML-tags, the tree building blocks.
204
204
3. text nodes -- contain text.
205
-
4. comments -- sometimes we can put the information there, it won't be shown, but JS can read it from the DOM.
205
+
4. comments -- sometimes we can put information there, it won't be shown, but JS can read it from the DOM.
206
206
207
207
## See it for yourself
208
208
209
-
To see the DOM structure in real-time, try [Live DOM Viewer](http://software.hixie.ch/utilities/js/live-dom-viewer/). Just type in the document, and it will show up DOM at an instant.
209
+
To see the DOM structure in real-time, try [Live DOM Viewer](http://software.hixie.ch/utilities/js/live-dom-viewer/). Just type in the document, and it will show up as a DOM at an instant.
210
210
211
211
Another way to explore the DOM is to use the browser developer tools. Actually, that's what we use when developing.
212
212
213
-
To do so, open the web-page [elks.html](elks.html), turn on the browser developer tools and switch to the Elements tab.
213
+
To do so, open the webpage [elks.html](elks.html), turn on the browser developer tools and switch to the Elements tab.
214
214
215
215
It should look like this:
216
216
@@ -220,7 +220,7 @@ You can see the DOM, click on elements, see their details and so on.
220
220
221
221
Please note that the DOM structure in developer tools is simplified. Text nodes are shown just as text. And there are no "blank" (space only) text nodes at all. That's fine, because most of the time we are interested in element nodes.
222
222
223
-
Clicking the <span class="devtools" style="background-position:-328px -124px"></span> button in the left-upper corner allows to choose a node from the webpage using a mouse (or other pointer devices) and "inspect" it (scroll to it in the Elements tab). This works great when we have a huge HTML page (and corresponding huge DOM) and would like to see the place of a particular element in it.
223
+
Clicking the <span class="devtools" style="background-position:-328px -124px"></span> button in the left-upper corner allows us to choose a node from the webpage using a mouse (or other pointer devices) and "inspect" it (scroll to it in the Elements tab). This works great when we have a huge HTML page (and corresponding huge DOM) and would like to see the place of a particular element in it.
224
224
225
225
Another way to do it would be just right-clicking on a webpage and selecting "Inspect" in the context menu.
226
226
@@ -253,7 +253,7 @@ That's how to get a node from Elements in Console.
253
253
254
254
There's also a road back. If there's a variable referencing a DOM node, then we can use the command `inspect(node)` in Console to see it in the Elements pane.
255
255
256
-
Or we can just output DOM-node in the console and explore "at-place", like `document.body` below:
256
+
Or we can just output the DOMnode in the console and explore "in-place", like `document.body` below:
0 commit comments