Skip to content

Commit 9920d65

Browse files
authored
Merge pull request #531 from ltlaitoff/fix-2-1.6-attributes-and-properties
fix(2-1.6): Review `Attributes and properties` article
2 parents c7ae1e7 + a6529e9 commit 9920d65

File tree

1 file changed

+38
-38
lines changed
  • 2-ui/1-document/06-dom-attributes-and-properties

1 file changed

+38
-38
lines changed

2-ui/1-document/06-dom-attributes-and-properties/article.md

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
# Атрибути та властивості
22

3-
Коли браузер завантажує сторінку, він "читає" (іншими словами: "парсить") HTML і генерує об’єкти з нього. Для вузлів-елементів, найбільш стандартні атрибути HTML автоматично стають властивостями обєктів DOM.
3+
Коли браузер завантажує сторінку, він "читає" (іншими словами: "парсить") HTML і генерує DOM об’єкти з нього. Для вузлів-елементів більшість стандартних атрибутів HTML автоматично стають властивостями об'єктів DOM.
44

5-
Наприклад, якщо тег є `<body id="page">`, то об’єкт DOM має `body.id="page"`.
5+
Наприклад, якщо тег це `<body id="page">`, тоді об’єкт DOM матиме `body.id="page"`.
66

7-
Але представлення атрибутів через власності не відбувається один в один! У цьому розділі ми звернемо увагу на те, що слід відокремити ці два поняття, щоб побачити, як працювати з ними, коли вони однакові, і коли вони різні.
7+
Але представлення атрибутів через властивості не відбувається один до одного! У цій главі ми звернемо увагу на відмінності цих двох концепцій, щоб навчитись, як з ними працювати, коли вони співпадають і коли відрізняються.
88

99
## DOM властивості
1010

11-
Ми вже бачили вбудовані властивості DOM. Їх багато. Але технічно ніхто не обмежує нас, і якщо цього недостатньо, то ми можемо додати наші власні.
11+
Ми вже бачили вбудовані властивості DOM. Їх багато. Але технічно ніхто нас не обмежує, і якщо їх недостатньо, ми можемо додати власні.
1212

13-
DOM вузли є звичайними об’єктами JavaScript. Ми можемо змінити їх.
13+
DOM вузли є звичайними об’єктами JavaScript. Ми можемо змінювати їх.
1414

15-
Наприклад, створімо нову властивість `document.body`:
15+
Наприклад, створімо нову властивість у `document.body`:
1616

1717
```js run
1818
document.body.myData = {
@@ -23,7 +23,7 @@ document.body.myData = {
2323
alert(document.body.myData.title); // Імператор
2424
```
2525

26-
Ми також можемо додати спосіб:
26+
Ми також можемо додати метод:
2727

2828
```js run
2929
document.body.sayTagName = function() {
@@ -44,24 +44,24 @@ document.documentElement.sayHi(); // Привіт, Я HTML
4444
document.body.sayHi(); // Привіт, Я BODY
4545
```
4646

47-
Отже, властивості та методи DOM поводяться у звичайних об’єктах JavaScript:
47+
Отже, властивості та методи DOM поводяться так само, як і звичайні об’єкти JavaScript:
4848

4949
- Вони можуть мати будь-яке значення.
50-
- Вони чутливі до регістру (пишіть `elem.nodeType`, не `elem.NoDeTyPe`).
50+
- Вони чутливі до регістру (наприклад `elem.nodeType`, не `elem.NoDeTyPe`).
5151

5252
## HTML атрибути
5353

54-
У HTML, теги можуть мати атрибути. Коли браузер аналізує HTML для створення об’єктів DOM для тегів, він розпізнає *стандартні* атрибути та створює властивості в DOM.
54+
У HTML, теги можуть мати атрибути. Коли браузер аналізує HTML і створює DOM-об'єкти для тегів, він розпізнає _стандартні_ атрибути та створює з них властивості DOM.
5555

56-
Отже, коли елемент має `id` або інший *стандартний* атрибут, створюється відповідна властивість. Але це не відбувається, якщо атрибут нестандартний.
56+
Отже, коли елемент має `id` або інший *стандартний* атрибут, створюється відповідна властивість. Проте цього не відбувається, якщо атрибут не є стандартним.
5757

5858
Наприклад:
5959
```html run
6060
<body id="test" something="non-standard">
6161
<script>
6262
alert(document.body.id); // test
6363
*!*
64-
// нестандартний атрибут не дає властивості
64+
// нестандартний атрибут не створює DOM-властивості
6565
alert(document.body.something); // undefined
6666
*/!*
6767
</script>
@@ -70,7 +70,7 @@ document.body.sayHi(); // Привіт, Я BODY
7070

7171
Зверніть увагу, що стандартний атрибут для одного елемента може бути невідомим для іншого. Наприклад, `"type"` -- це стандартний для `<input>` ([HTMLInputElement](https://html.spec.whatwg.org/#htmlinputelement)), але не для `<body>` ([HTMLBodyElement](https://html.spec.whatwg.org/#htmlbodyelement)). Стандартні атрибути описані у специфікації для відповідного класу елемента.
7272

73-
Here we can see it:
73+
Ось приклад:
7474
```html run
7575
<body id="body" type="...">
7676
<input id="input" type="text">
@@ -83,32 +83,32 @@ Here we can see it:
8383
</body>
8484
```
8585

86-
Отже, якщо атрибут є нестандартним, то для нього не буде DOM властивості. Чи є спосіб доступу до таких атрибутів?
86+
Отже, якщо атрибут не є стандартним, то для нього не буде створено DOM-властивості. Чи є спосіб отримати доступ до таких атрибутів?
8787

8888
Звичайно. Всі атрибути доступні за допомогою наступних методів:
8989

90-
- `elem.hasAttribute(name)` -- перевіряє наявність.
91-
- `elem.getAttribute(name)` -- отримує значення.
92-
- `elem.setAttribute(name, value)` -- встановлює значення.
90+
- `elem.hasAttribute(name)` -- перевіряє наявність атрибута.
91+
- `elem.getAttribute(name)` -- отримує значення атрибута.
92+
- `elem.setAttribute(name, value)` -- встановлює значення атрибута.
9393
- `elem.removeAttribute(name)` -- видаляє атрибут.
9494

95-
Ці методи працюють саме з тим, що написано в HTML.
95+
Ці методи працюють із значеннями, записаними у HTML.
9696

97-
Також можна прочитати всі атрибути, використовуючи `elem.attributes`: колекція обєктів, що належать до вбудованого класу [Attr](https://dom.spec.whatwg.org/#attr), з `name` і `value` властивостями.
97+
Також можна прочитати всі атрибути, використовуючи `elem.attributes`: це колекція об'єктів, які належать вбудованому класу [Attr](https://dom.spec.whatwg.org/#attr), і мають властивості `name` та `value`.
9898

99-
Ось демонстрація читання нестандартної власності:
99+
Ось демонстрація читання нестандартного атрибута:
100100

101101
```html run
102102
<body something="non-standard">
103103
<script>
104104
*!*
105-
alert(document.body.getAttribute('something')); // нестандартна
105+
alert(document.body.getAttribute('something')); // non-standard
106106
*/!*
107107
</script>
108108
</body>
109109
```
110110

111-
Атрибути HTML мають такі функції:
111+
Атрибути HTML мають такі особливості:
112112

113113
- Їх назва нечутлива до регістру (`id` -- це те саме, що й `ID`).
114114
- Їхні значення завжди є рядками.
@@ -126,7 +126,7 @@ Here we can see it:
126126
127127
alert( elem.outerHTML ); // (3), дивимося чи атрибут знаходиться в HTML (так)
128128
129-
for (let attr of elem.attributes) { // (4) перелічуємо всі
129+
for (let attr of elem.attributes) { // (4) перерахування всіх атрибутів
130130
alert( `${attr.name} = ${attr.value}` );
131131
}
132132
</script>
@@ -135,16 +135,16 @@ Here we can see it:
135135

136136
Будь ласка, зверніть увагу:
137137

138-
1. `getAttribute('About')` -- перша буква тут є великою, а в HTML це всі з малої літери. Але це не має значення: імена атрибутів -- нечутливі до регістру.
139-
2. Ми можемо призначити будь-що атрибуту, але це стане рядком. Отже, ми маємо `"123"` як значення.
138+
1. `getAttribute('About')` -- перша літера написана великою, а в HTML вона пишеться маленькою. Але це не має значення: імена атрибутів нечутливі до регістру.
139+
2. Ми можемо присвоїти атрибуту будь-яке значення, але воно стане рядком. Тому тут ми отримуємо `"123"` як значення.
140140
3. Всі атрибути, включаючи ті, які ми встановлюємо, видно в `outerHTML`.
141-
4. Колекція `attributes` є ітерованою і має всі атрибути елемента (стандартні та нестандартні) як об’єкти з `name` і `value` властивостями.
141+
4. Колекція `attributes` є ітерованою і має всі атрибути елемента (стандартні та нестандартні) у вигляді об'єктів з властивостями `name` та `value`.
142142

143143
## Синхронізація властивостей і атрибутів
144144

145-
Коли стандартний атрибут змінюється, відповідна властивість автоматично оновлюється і деякими винятками) навпаки.
145+
Коли стандартний атрибут змінюється, відповідна властивість автоматично оновлюється і, за деякими винятками, навпаки.
146146

147-
У наведеному нижче прикладі `id` модифікується як атрибут, і ми також можемо побачити зміну властивості. А потім те ж саме навпаки:
147+
У наведеному нижче прикладі `id` модифікується як атрибут, і ми також можемо побачити, що властивість теж змінюється. А потім те ж саме навпаки:
148148

149149
```html run
150150
<input>
@@ -162,7 +162,7 @@ Here we can see it:
162162
</script>
163163
```
164164

165-
Але є винятки, наприклад, `input.value` синхронізує лише з атрибуту -> до властивості, але не назад:
165+
Але є винятки, наприклад, `input.value` синхронізується лише в одному напрямку, з атрибуту -> до властивості, але не навпаки:
166166

167167
```html run
168168
<input>
@@ -190,7 +190,7 @@ Here we can see it:
190190

191191
## Властивості DOM типізовані
192192

193-
Властивості DOM не завжди є рядками. Наприклад, властивість `input.checked` (для чекбоксів) має бульовий тип:
193+
Властивості DOM не завжди є рядками. Наприклад, властивість `input.checked` (для чекбоксів) має логічний(булевий) тип:
194194

195195
```html run
196196
<input id="input" type="checkbox" checked> чекбокс
@@ -207,10 +207,10 @@ Here we can see it:
207207
<div id="div" style="color:red;font-size:120%">Привіт</div>
208208

209209
<script>
210-
// string
210+
// рядок
211211
alert(div.getAttribute('style')); // color:red;font-size:120%
212212
213-
// object
213+
// об’єкт
214214
alert(div.style); // [object CSSStyleDeclaration]
215215
alert(div.style.color); // red
216216
</script>
@@ -238,9 +238,9 @@ Here we can see it:
238238

239239
## Нестандартні атрибути, dataset
240240

241-
При написанні HTML ми використовуємо багато стандартних атрибутів. Але як щодо нестандартних, користувацьких? По-перше, подивімося, чи вони корисні чи ні? І для чого?
241+
При написанні HTML ми використовуємо багато стандартних атрибутів. Але як щодо нестандартних, користувацьких? Спершу давайте побачимо, чи вони корисні, і для чого вони потрібні?
242242

243-
Іноді нестандартні атрибути використовуються для передачі користувацьких даних з HTML до JavaScript, або для "позначки" HTML-елементів для JavaScript.
243+
Іноді нестандартні атрибути використовуються для передачі користувацьких даних з HTML до JavaScript, або для "позначення" HTML-елементів для JavaScript.
244244

245245
Наприклад:
246246

@@ -307,7 +307,7 @@ Here we can see it:
307307
div.setAttribute('order-state', 'canceled');
308308
```
309309

310-
Але може виникнути потенційна проблема з користувацькими атрибутами. Що робити, якщо ми використовуємо нестандартний атрибут для наших цілей, а пізніше він з’являється в стандарті і виконує якусь функцію? Мова HTML жива, вона зростає, а також з’являється більше атрибутів, які відповідають потребам розробників. У такому випадку можуть бути несподівані ефекти.
310+
Але може виникнути потенційна проблема з користувацькими атрибутами. Що робити, якщо ми використовуємо нестандартний атрибут для наших цілей, а потім стандарт вводить його та надає йому якусь функціональність? Мова HTML жива, вона зростає, а також з’являється більше атрибутів, які відповідають потребам розробників. У такому випадку можуть виникнути неочікувані наслідки.
311311

312312
Щоб уникнути конфліктів, існують [data-*](https://html.spec.whatwg.org/#embedding-custom-non-visible-data-with-the-data-*-attributes) атрибути.
313313

@@ -324,7 +324,7 @@ div.setAttribute('order-state', 'canceled');
324324
</script>
325325
```
326326

327-
Атрибути, що складаються з декількох слів, такі як `data-order-state` стають записані за допомогою верблюжої нотації (camel-case): `dataset.orderState`.
327+
Атрибути, що складаються з декількох слів, такі як `data-order-state` стають записані за допомогою верблюжої нотації (camel-case): `dataset.orderState`.
328328

329329
Ось приклад переписаного "order state":
330330

@@ -356,9 +356,9 @@ div.setAttribute('order-state', 'canceled');
356356
</script>
357357
```
358358

359-
Використання атрибутів `data-*` є валідним, безпечним способом передачі власних даних.
359+
Використання атрибутів `data-*` є валідним, безпечним способом передачі додаткових даних.
360360

361-
Зверніть увагу, що ми можемо не тільки читати, але й модифікувати атрибути даних. Тоді CSS відповідно оновлює зовнішній вигляд: у прикладі вище останнього рядка `(*)` змінює колір на синій.
361+
Зверніть увагу, що ми можемо не тільки читати, але й модифікувати data-атрибути. Тоді CSS відповідно оновлює зовнішній вигляд: у прикладі вище останнього рядка `(*)` змінює колір на синій.
362362

363363
## Підсумки
364364

0 commit comments

Comments
 (0)