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/06-dom-attributes-and-properties/article.md
+38-38Lines changed: 38 additions & 38 deletions
Original file line number
Diff line number
Diff line change
@@ -1,18 +1,18 @@
1
1
# Атрибути та властивості
2
2
3
-
Коли браузер завантажує сторінку, він "читає" (іншими словами: "парсить") HTML і генерує об’єкти з нього. Для вузлів-елементів, найбільш стандартні атрибути HTML автоматично стають властивостями об’єктів DOM.
3
+
Коли браузер завантажує сторінку, він "читає" (іншими словами: "парсить") HTML і генерує DOM об’єкти з нього. Для вузлів-елементів більшість стандартних атрибутів HTML автоматично стають властивостями об'єктів DOM.
4
4
5
-
Наприклад, якщо тег є`<body id="page">`, то об’єкт DOM має`body.id="page"`.
5
+
Наприклад, якщо тег це`<body id="page">`, тоді об’єкт DOM матиме`body.id="page"`.
6
6
7
-
Але представлення атрибутів через власності не відбувається один в один! У цьому розділі ми звернемо увагу на те, що слід відокремити ці два поняття, щоб побачити, як працювати з ними, коли вони однакові, і коли вони різні.
7
+
Але представлення атрибутів через властивості не відбувається один до одного! У цій главі ми звернемо увагу на відмінності цих двох концепцій, щоб навчитись, як з ними працювати, коли вони співпадають і коли відрізняються.
8
8
9
9
## DOM властивості
10
10
11
-
Ми вже бачили вбудовані властивості DOM. Їх багато. Але технічно ніхто не обмежує нас, і якщо цього недостатньо, то ми можемо додати наші власні.
11
+
Ми вже бачили вбудовані властивості DOM. Їх багато. Але технічно ніхто нас не обмежує, і якщо їх недостатньо, ми можемо додати власні.
12
12
13
-
DOM вузли є звичайними об’єктами JavaScript. Ми можемо змінити їх.
13
+
DOM вузли є звичайними об’єктами JavaScript. Ми можемо змінювати їх.
14
14
15
-
Наприклад, створімо нову властивість `document.body`:
15
+
Наприклад, створімо нову властивість у `document.body`:
16
16
17
17
```js run
18
18
document.body.myData= {
@@ -23,7 +23,7 @@ document.body.myData = {
23
23
alert(document.body.myData.title); // Імператор
24
24
```
25
25
26
-
Ми також можемо додати спосіб:
26
+
Ми також можемо додати метод:
27
27
28
28
```js run
29
29
document.body.sayTagName=function() {
@@ -44,24 +44,24 @@ document.documentElement.sayHi(); // Привіт, Я HTML
44
44
document.body.sayHi(); // Привіт, Я BODY
45
45
```
46
46
47
-
Отже, властивості та методи DOM поводяться у звичайних об’єктах JavaScript:
47
+
Отже, властивості та методи DOM поводяться так само, як і звичайні об’єкти JavaScript:
48
48
49
49
- Вони можуть мати будь-яке значення.
50
-
- Вони чутливі до регістру (пишіть`elem.nodeType`, не `elem.NoDeTyPe`).
50
+
- Вони чутливі до регістру (наприклад`elem.nodeType`, не `elem.NoDeTyPe`).
51
51
52
52
## HTML атрибути
53
53
54
-
У HTML, теги можуть мати атрибути. Коли браузер аналізує HTML для створення об’єктів DOM для тегів, він розпізнає *стандартні* атрибути та створює властивості в DOM.
54
+
У HTML, теги можуть мати атрибути. Коли браузер аналізує HTML і створює DOM-об'єкти для тегів, він розпізнає _стандартні_ атрибути та створює з них властивості DOM.
55
55
56
-
Отже, коли елемент має `id` або інший *стандартний* атрибут, створюється відповідна властивість. Але це не відбувається, якщо атрибут нестандартний.
56
+
Отже, коли елемент має `id` або інший *стандартний* атрибут, створюється відповідна властивість. Проте цього не відбувається, якщо атрибут не є стандартним.
57
57
58
58
Наприклад:
59
59
```html run
60
60
<bodyid="test"something="non-standard">
61
61
<script>
62
62
alert(document.body.id); // test
63
63
*!*
64
-
// нестандартний атрибут не дає властивості
64
+
// нестандартний атрибут не створює DOM-властивості
65
65
alert(document.body.something); // undefined
66
66
*/!*
67
67
</script>
@@ -70,7 +70,7 @@ document.body.sayHi(); // Привіт, Я BODY
70
70
71
71
Зверніть увагу, що стандартний атрибут для одного елемента може бути невідомим для іншого. Наприклад, `"type"` -- це стандартний для `<input>` ([HTMLInputElement](https://html.spec.whatwg.org/#htmlinputelement)), але не для `<body>` ([HTMLBodyElement](https://html.spec.whatwg.org/#htmlbodyelement)). Стандартні атрибути описані у специфікації для відповідного класу елемента.
72
72
73
-
Here we can see it:
73
+
Ось приклад:
74
74
```html run
75
75
<bodyid="body"type="...">
76
76
<inputid="input"type="text">
@@ -83,32 +83,32 @@ Here we can see it:
83
83
</body>
84
84
```
85
85
86
-
Отже, якщо атрибут є нестандартним, то для нього не буде DOM властивості. Чи є спосіб доступу до таких атрибутів?
86
+
Отже, якщо атрибут не є стандартним, то для нього не буде створено DOM-властивості. Чи є спосіб отримати доступ до таких атрибутів?
87
87
88
88
Звичайно. Всі атрибути доступні за допомогою наступних методів:
-`elem.setAttribute(name, value)` -- встановлює значення.
90
+
-`elem.hasAttribute(name)` -- перевіряє наявність атрибута.
91
+
-`elem.getAttribute(name)` -- отримує значення атрибута.
92
+
-`elem.setAttribute(name, value)` -- встановлює значення атрибута.
93
93
-`elem.removeAttribute(name)` -- видаляє атрибут.
94
94
95
-
Ці методи працюють саме з тим, що написано в HTML.
95
+
Ці методи працюють із значеннями, записаними у HTML.
96
96
97
-
Також можна прочитати всі атрибути, використовуючи `elem.attributes`: колекція об’єктів, що належать до вбудованого класу [Attr](https://dom.spec.whatwg.org/#attr), з `name`і`value` властивостями.
97
+
Також можна прочитати всі атрибути, використовуючи `elem.attributes`: це колекція об'єктів, які належать вбудованому класу [Attr](https://dom.spec.whatwg.org/#attr), і мають властивості `name`та`value`.
- Їх назва нечутлива до регістру (`id` -- це те саме, що й `ID`).
114
114
- Їхні значення завжди є рядками.
@@ -126,7 +126,7 @@ Here we can see it:
126
126
127
127
alert( elem.outerHTML ); // (3), дивимося чи атрибут знаходиться в HTML (так)
128
128
129
-
for (let attr ofelem.attributes) { // (4) перелічуємо всі
129
+
for (let attr ofelem.attributes) { // (4) перерахування всіх атрибутів
130
130
alert( `${attr.name} = ${attr.value}` );
131
131
}
132
132
</script>
@@ -135,16 +135,16 @@ Here we can see it:
135
135
136
136
Будь ласка, зверніть увагу:
137
137
138
-
1.`getAttribute('About')` -- перша буква тут є великою, а в HTML це всі з малої літери. Але це не має значення: імена атрибутів -- нечутливі до регістру.
139
-
2. Ми можемо призначити будь-що атрибуту, але це стане рядком. Отже, ми маємо`"123"` як значення.
138
+
1.`getAttribute('About')` -- перша літера написана великою, а в HTML вона пишеться маленькою. Але це не має значення: імена атрибутів нечутливі до регістру.
139
+
2. Ми можемо присвоїти атрибуту будь-яке значення, але воно стане рядком. Тому тут ми отримуємо`"123"` як значення.
140
140
3. Всі атрибути, включаючи ті, які ми встановлюємо, видно в `outerHTML`.
141
-
4. Колекція `attributes` є ітерованою і має всі атрибути елемента (стандартні та нестандартні) як об’єкти з `name`і`value` властивостями.
141
+
4. Колекція `attributes` є ітерованою і має всі атрибути елемента (стандартні та нестандартні) у вигляді об'єктів з властивостями `name`та`value`.
142
142
143
143
## Синхронізація властивостей і атрибутів
144
144
145
-
Коли стандартний атрибут змінюється, відповідна властивість автоматично оновлюється і (з деякими винятками) навпаки.
145
+
Коли стандартний атрибут змінюється, відповідна властивість автоматично оновлюється і, за деякими винятками, навпаки.
146
146
147
-
У наведеному нижче прикладі `id` модифікується як атрибут, і ми також можемо побачити зміну властивості. А потім те ж саме навпаки:
147
+
У наведеному нижче прикладі `id` модифікується як атрибут, і ми також можемо побачити, що властивість теж змінюється. А потім те ж саме навпаки:
148
148
149
149
```html run
150
150
<input>
@@ -162,7 +162,7 @@ Here we can see it:
162
162
</script>
163
163
```
164
164
165
-
Але є винятки, наприклад, `input.value`синхронізує лише з атрибуту -> до властивості, але не назад:
165
+
Але є винятки, наприклад, `input.value`синхронізується лише в одному напрямку, з атрибуту -> до властивості, але не навпаки:
166
166
167
167
```html run
168
168
<input>
@@ -190,7 +190,7 @@ Here we can see it:
190
190
191
191
## Властивості DOM типізовані
192
192
193
-
Властивості DOM не завжди є рядками. Наприклад, властивість `input.checked` (для чекбоксів) має бульовий тип:
193
+
Властивості DOM не завжди є рядками. Наприклад, властивість `input.checked` (для чекбоксів) має логічний(булевий) тип:
При написанні HTML ми використовуємо багато стандартних атрибутів. Але як щодо нестандартних, користувацьких? По-перше, подивімося, чи вони корисні чи ні? І для чого?
241
+
При написанні HTML ми використовуємо багато стандартних атрибутів. Але як щодо нестандартних, користувацьких? Спершу давайте побачимо, чи вони корисні, і для чого вони потрібні?
242
242
243
-
Іноді нестандартні атрибути використовуються для передачі користувацьких даних з HTML до JavaScript, або для "позначки" HTML-елементів для JavaScript.
243
+
Іноді нестандартні атрибути використовуються для передачі користувацьких даних з HTML до JavaScript, або для "позначення" HTML-елементів для JavaScript.
244
244
245
245
Наприклад:
246
246
@@ -307,7 +307,7 @@ Here we can see it:
307
307
div.setAttribute('order-state', 'canceled');
308
308
```
309
309
310
-
Але може виникнути потенційна проблема з користувацькими атрибутами. Що робити, якщо ми використовуємо нестандартний атрибут для наших цілей, а пізніше він з’являється в стандарті і виконує якусь функцію? Мова HTML жива, вона зростає, а також з’являється більше атрибутів, які відповідають потребам розробників. У такому випадку можуть бути несподівані ефекти.
310
+
Але може виникнути потенційна проблема з користувацькими атрибутами. Що робити, якщо ми використовуємо нестандартний атрибут для наших цілей, а потім стандарт вводить його та надає йому якусь функціональність? Мова HTML жива, вона зростає, а також з’являється більше атрибутів, які відповідають потребам розробників. У такому випадку можуть виникнути неочікувані наслідки.
311
311
312
312
Щоб уникнути конфліктів, існують [data-*](https://html.spec.whatwg.org/#embedding-custom-non-visible-data-with-the-data-*-attributes) атрибути.
Атрибути, що складаються з декількох слів, такі як `data-order-state` стають записані за допомогою верблюжої нотації (camel-case): `dataset.orderState`.
327
+
Атрибути, що складаються з декількох слів, такі як `data-order-state` стають записані за допомогою верблюжої нотації (camel-case): `dataset.orderState`.
Використання атрибутів `data-*` є валідним, безпечним способом передачі власних даних.
359
+
Використання атрибутів `data-*` є валідним, безпечним способом передачі додаткових даних.
360
360
361
-
Зверніть увагу, що ми можемо не тільки читати, але й модифікувати атрибути даних. Тоді CSS відповідно оновлює зовнішній вигляд: у прикладі вище останнього рядка `(*)` змінює колір на синій.
361
+
Зверніть увагу, що ми можемо не тільки читати, але й модифікувати data-атрибути. Тоді CSS відповідно оновлює зовнішній вигляд: у прикладі вище останнього рядка `(*)` змінює колір на синій.
0 commit comments