Skip to content

Commit 80d8ded

Browse files
authored
Merge pull request #518 from ltlaitoff/fix-2-1.3-dom-navigation
fix(2-1.3): Review `DOM navigation` acticle
2 parents 0c37a6c + b8b2575 commit 80d8ded

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

2-ui/1-document/03-dom-navigation/article.md

+23-23
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ libs:
77

88
# Навігація по DOM
99

10-
DOM дозволяє нам робити будь-що з елементами та їх вмістом, але спочатку нам потрібно знайти відповідний DOM об’єкт.
10+
DOM дозволяє нам робити будь-що з елементами та їх вмістом, але спочатку нам потрібно отримати відповідний DOM об’єкт.
1111

1212
Усі операції з DOM починаються з об’єкта `document`. Це головна "точка входу" в DOM. З нього ми можемо отримати доступ до будь-якого вузла.
1313

14-
Ось зображення структури посилань, які дозволяють переміщатися між вузлами DOM:
14+
Ось так виглядають основні посилання, які дозволяють переміщатися між вузлами DOM:
1515

1616
![](dom-links.svg)
1717

@@ -22,10 +22,10 @@ DOM дозволяє нам робити будь-що з елементами
2222
Найвищі вузли дерева доступні безпосередньо як властивості `document`:
2323

2424
`<html>` = `document.documentElement`
25-
: Найвищий вузол документа -- `document.documentElement`. Це вузол DOM тегу `<html>`.
25+
: Найвищий вузол документа -- `document.documentElement`. В DOM він відповідає тегу `<html>`.
2626

2727
`<body>` = `document.body`
28-
: Для доступу до DOM вузлу `<body>` часто використовують елемент -- `document.body`.
28+
: Іншим широко використовуваним вузлом DOM є елемент `<body>` -- `document.body`.
2929

3030
`<head>` = `document.head`
3131
: Тег `<head>` доступний як `document.head`.
@@ -63,7 +63,7 @@ DOM дозволяє нам робити будь-що з елементами
6363
У DOM значення `null` означає "не існує" або "такого вузла немає".
6464
```
6565
66-
## Дочірні елементи: childNodes, firstChild, lastChild
66+
## Дочірні вузли: childNodes, firstChild, lastChild
6767
6868
Відтепер ми будемо використовувати два терміни:
6969
@@ -86,7 +86,7 @@ DOM дозволяє нам робити будь-що з елементами
8686
</html>
8787
```
8888
89-
...А нащадками `<body>` є не тільки прямі дочірні елементи `<div>`, `<ul>`, але й більш глибоко вкладені елементи, такі як `<li>` (дочірній елемент `<ul>`) та `<b>` (дочірній елемент `<li>`) -- тобто усе піддерево.
89+
...А нащадками `<body>` є не тільки прямі дочірні елементи `<div>`, `<ul>`, але й більш глибоко вкладені елементи, такі як `<li>` (дочірній елемент `<ul>`) та `<b>` (дочірній елемент `<li>`) -- тобто усі елементи піддерева.
9090
9191
**Колекція `childNodes` містить список усіх дочірніх вузлів, включаючи текстові вузли.**
9292
@@ -115,9 +115,9 @@ DOM дозволяє нам робити будь-що з елементами
115115
</html>
116116
```
117117
118-
Зверніть увагу на цікаву деталь. Якщо ми запустимо наведений вище приклад, останнім показаним елементом буде `<script>`. Насправді нижче в документі є більше речей, але на момент виконання сценарію браузер його ще не прочитав, тому скрипт його не бачить.
118+
Зверніть увагу на цікаву деталь. Якщо ми запустимо наведений вище приклад, останнім показаним елементом буде `<script>`. Насправді нижче в документі є більше коду, але на момент виконання скрипту браузер його ще не прочитав, тому скрипт його не бачить.
119119
120-
**Властивості `firstChild` і `lastChild` надають швидкий доступ до першого та останнього дочірнього елемента.**
120+
**Властивості `firstChild` і `lastChild` надають швидкий доступ до першого та останнього дочірнього вузла.**
121121
122122
Це лише скорочення. Якщо існують дочірні вузли, то завжди вірно наступне:
123123
```js
@@ -129,19 +129,19 @@ elem.childNodes[elem.childNodes.length - 1] === elem.lastChild
129129
130130
### DOM колекції
131131
132-
Як бачимо, `childNodes` виглядає як масив. Але насправді це не масив, а скоріше *колекція* -- спеціальний ітеративний об’єкт, подібний до масиву.
132+
Як бачимо, `childNodes` виглядає як масив. Але насправді це не масив, а скоріше *колекція* -- спеціальний ітеративний об’єкт-псевдомасив.
133133
134-
Є два важливих наслідки:
134+
Є два важливих наслідки з цього:
135135
136136
1. Ми можемо використовувати `for..of`, щоб перебирати його:
137137
```js
138138
for (let node of document.body.childNodes) {
139139
alert(node); // показує всі вузли з колекції
140140
}
141141
```
142-
Це тому, що він ітерований (підчас перебору може надавати властивість `Symbol.iterator`).
142+
Це працює, бо колекція є ітерованим об’єктом (є потрібний для цього метод `Symbol.iterator`).
143143
144-
2. Методи масиву не працюватимуть, тому що це не масив:
144+
2. Методи масиву не працюватимуть, бо колекція це не масив:
145145
```js run
146146
alert(document.body.childNodes.filter); // undefined (методу filter немає!)
147147
```
@@ -180,9 +180,9 @@ elem.childNodes[elem.childNodes.length - 1] === elem.lastChild
180180
</body>
181181
````
182182

183-
## Сусідні і батьківський елементи
183+
## Сусіди та батьківський вузол
184184

185-
*Сусіди*, або сусідні вузли -- це вузли, які мають однаковий батьківський елемент.
185+
*Сусіди*, або сусідні вузли -- це вузли, які є нащадками одного батька.
186186

187187
Наприклад, тут `<head>` і `<body>` є сусідами:
188188

@@ -214,25 +214,25 @@ alert( document.body.previousSibling ); // HTMLHeadElement
214214

215215
## Навігація лише за елементами
216216

217-
Властивості навігації, перераховані вище, відносяться до *всіх* вузлів. Наприклад, у `childNodes` ми можемо побачити як текстові вузли, так і вузли елементів і навіть вузли коментарів, якщо вони існують.
217+
Властивості навігації, перераховані вище, відносяться до *всіх* вузлів в документі. Наприклад, у `childNodes` ми можемо побачити як текстові вузли, так і вузли елементів і навіть вузли коментарів, якщо вони існують.
218218

219219
Але для багатьох задач нам не потрібні текстові вузли чи вузли коментарів. Ми хочемо маніпулювати вузлами елементів, які представляють теги та формують структуру сторінки.
220220

221-
Тож давайте подивимося властивости зі спеціальними посиланнями, які враховують лише *вузли-елементи*:
221+
Тож давайте розглянемо додатковий набір посилань, які враховують лише *вузли-елементи*:
222222

223223
![](dom-links-elements.svg)
224224

225225
Посилання подібні до наведених вище, лише із словом `Element` всередині:
226226

227-
- `children` -- тільки ті дочірні елементи, які є вузлами-елементами.
227+
- `children` -- колекція дітей, які є елементами.
228228
- `firstElementChild`, `lastElementChild` -- перший і останній дочірні елементи.
229229
- `previousElementSibling`, `nextElementSibling` -- сусідні елементи.
230230
- `parentElement` -- батьківський елемент.
231231

232232
````smart header="Чому `parentElement`? Чи може батько бути *не елементом?*"
233-
Властивість `parentElement` повертає батьківський елемент "element", тоді як `parentNode` повертає батьківський "будь-який вузол". Ці властивості зазвичай однакові: обидва вони отримують батьківський елемент.
233+
Властивість `parentElement` повертає батьківський елемент "element", тоді як `parentNode` повертає батьківський "будь-який вузол". Ці властивості зазвичай однакові: обидві вони отримують батьківський елемент.
234234

235-
За одним винятком `document.documentElement`:
235+
За винятком `document.documentElement`:
236236

237237
```js run
238238
alert( document.documentElement.parentNode ); // document
@@ -283,12 +283,12 @@ while(elem = elem.parentElement) { // ідемо вгору, поки не ді
283283
Таблиці є чудовим прикладом цього і представляють особливо важливий випадок:
284284
285285
**Елемент`<table>`** підтримує (на додаток до наведених вище) такі властивості:
286-
- `table.rows` -- набір елементів `<tr>` таблиці.
286+
- `table.rows` -- колекція рядків `<tr>` таблиці.
287287
- `table.caption/tHead/tFoot` -- посилання на елементи `<caption>`, `<thead>`, `<tfoot>`.
288288
- `table.tBodies` -- колекція елементів `<tbody>` (за стандартом може бути багато, але завжди буде принаймні один -- навіть якщо його немає у вихідному HTML, браузер помістить його в DOM).
289289
290290
**Елементи `<thead>`, `<tfoot>`, `<tbody>`** забезпечують властивість `rows`:
291-
- `tbody.rows` -- колекція `<tr>` всередині.
291+
- `tbody.rows` -- колекція рядків `<tr>` всередині.
292292
293293
**`<tr>`:**
294294
- `tr.cells` -- колекція клітинок `<td>` і `<th>` всередині заданого рядка `<tr>`.
@@ -311,9 +311,9 @@ while(elem = elem.parentElement) { // ідемо вгору, поки не ді
311311
</table>
312312
313313
<script>
314-
// get td with "two" (first row, second column)
314+
// отримати td з "two" (перший рядок, друга колонка)
315315
let td = table.*!*rows[0].cells[1]*/!*;
316-
td.style.backgroundColor = "red"; // highlight it
316+
td.style.backgroundColor = "red"; // виділити червоним
317317
</script>
318318
```
319319

0 commit comments

Comments
 (0)