|
1 | 1 | # Атрибуты и свойства |
2 | 2 |
|
3 | | -Когда браузер загружает страницу, он "читает" (другими словами: "парсит") HTML и генерирует из него DOM-объекты. Для элементов-узлов большинство стандартных HTML-атрибутов автоматически становятся свойствами DOM-объектов. |
| 3 | +Когда браузер загружает страницу, он "читает" (также говорят: "парсит") HTML и генерирует из него DOM-объекты. Для узлов-элементов большинство стандартных HTML-атрибутов автоматически становятся свойствами DOM-объектов. |
4 | 4 |
|
5 | 5 | Например, для такого тега `<body id="page">` у DOM-объекта будет такое свойство `body.id="page"`. |
6 | 6 |
|
7 | | -Но преобразование атрибута в свойство не происходит один в один! В этой главе мы уделим внимание различию этих двух понятий, чтобы посмотреть, как работать с ними, когда они одинаковые, а когда разные. |
| 7 | +Но преобразование атрибута в свойство происходит не один-в-один! В этой главе мы уделим внимание различию этих двух понятий, чтобы посмотреть, как работать с ними, когда они одинаковые, а когда разные. |
8 | 8 |
|
9 | 9 | ## DOM-свойства |
10 | 10 |
|
@@ -33,7 +33,7 @@ document.body.sayTagName = function() { |
33 | 33 | document.body.sayTagName(); // BODY (значением "this" в этом методе будет document.body) |
34 | 34 | ``` |
35 | 35 |
|
36 | | -Также можно изменить встроенные прототипы, такие как `Element.prototype`, а также добавить новые методы ко всем элементам: |
| 36 | +Также можно изменять встроенные прототипы, такие как `Element.prototype` и добавлять новые методы ко всем элементам: |
37 | 37 |
|
38 | 38 | ```js run |
39 | 39 | Element.prototype.sayHi = function() { |
@@ -83,7 +83,7 @@ document.body.sayHi(); // Hello, I'm BODY |
83 | 83 | </body> |
84 | 84 | ``` |
85 | 85 |
|
86 | | -Таким образом, для нестандартных атрибутов не может быть соответствующих DOM-свойств. Есть ли способ получить такие атрибуты? |
| 86 | +Таким образом, для нестандартных атрибутов не будет соответствующих DOM-свойств. Есть ли способ получить такие атрибуты? |
87 | 87 |
|
88 | 88 | Конечно. Все атрибуты доступны с помощью следующих методов: |
89 | 89 |
|
@@ -135,7 +135,7 @@ document.body.sayHi(); // Hello, I'm BODY |
135 | 135 |
|
136 | 136 | Пожалуйста, обратите внимание: |
137 | 137 |
|
138 | | -1. `getAttribute('About')` -- в методе первая буква заглавная, а в HTML -- строчная. Но это неважно: имена атрибутов регистронезависимы. |
| 138 | +1. `getAttribute('About')` -- здесь первая буква заглавная, а в HTML -- строчная. Но это не важно: имена атрибутов регистронезависимы. |
139 | 139 | 2. Мы можем присвоить что угодно атрибуту, но это станет строкой. Поэтому в этой строчке мы получаем значение `"123"`. |
140 | 140 | 3. Все атрибуты, в том числе те, которые мы установили, видны в `outerHTML`. |
141 | 141 | 4. Коллекция `attributes` является итерируемой. В ней есть все элементы атрибута (стандартные и нестандартные) в виде объектов со свойствами `name` и `value`. |
@@ -186,7 +186,7 @@ document.body.sayHi(); // Hello, I'm BODY |
186 | 186 | - Изменение атрибута `value` обновило свойство. |
187 | 187 | - Но изменение свойства не повлияло на атрибут. |
188 | 188 |
|
189 | | -На самом деле эта "особенность" может пригодиться, потому что пользователь может изменять `value`, и если после этого мы захотим восстановить "оригинальное" значение из HTML, оно будет в атрибуте. |
| 189 | +На самом деле эта "особенность" может пригодиться, потому что действия пользователя могут приводить к изменениям `value`, и если после этого мы захотим восстановить "оригинальное" значение из HTML, оно будет в атрибуте. |
190 | 190 |
|
191 | 191 | ## DOM-свойства типизированы |
192 | 192 |
|
@@ -216,9 +216,10 @@ DOM-свойства не всегда являются строками. Нап |
216 | 216 | </script> |
217 | 217 | ``` |
218 | 218 |
|
219 | | -Это важное отличие. Но даже если DOM-свойство является строкой, оно может отличаться от атрибута! |
| 219 | +Хотя большинство свойств, всё же, строки. |
| 220 | +При этом некоторые из них, хоть и строки, могут отличаться от атрибутов. |
220 | 221 |
|
221 | | -Например, DOM-свойство `href` всегда *полный* URL, даже если атрибут содержит относительный URL или просто `#hash`. |
| 222 | +Например, DOM-свойство `href` всегда содержит *полный* URL, даже если атрибут содержит относительный URL или просто `#hash`. |
222 | 223 |
|
223 | 224 | Ниже пример: |
224 | 225 |
|
@@ -265,7 +266,7 @@ DOM-свойства не всегда являются строками. Нап |
265 | 266 | </script> |
266 | 267 | ``` |
267 | 268 |
|
268 | | -Также, они могут быть использованы, чтобы стилизовать элементы. |
| 269 | +Также они могут быть использованы, чтобы стилизовать элементы. |
269 | 270 |
|
270 | 271 | Например, здесь для состояния заказа используется атрибут `order-state`: |
271 | 272 |
|
@@ -309,7 +310,7 @@ div.setAttribute('order-state', 'canceled'); |
309 | 310 |
|
310 | 311 | Но с пользовательскими атрибутами могут возникнуть проблемы. Что если мы используем нестандартный атрибут для наших целей, а позже он появится в стандарте и будет выполнять какую-то функцию? Язык HTML живой, он растёт, появляется больше атрибутов, чтобы удовлетворить потребности разработчиков. В этом случае могут возникнуть неожиданные эффекты. |
311 | 312 |
|
312 | | -Чтобы избежать конфликтов, существуют атрибуты [data-*](https://html.spec.whatwg.org/#embedding-custom-non-visible-data-with-the-data-*-attributes). |
| 313 | +Чтобы избежать конфликтов, существуют атрибуты вида [data-*](https://html.spec.whatwg.org/#embedding-custom-non-visible-data-with-the-data-*-attributes). |
313 | 314 |
|
314 | 315 | **Все атрибуты, начинающиеся с префикса "data-", зарезервированы для использования программистами. Они доступны в свойстве `dataset`.** |
315 | 316 |
|
@@ -380,7 +381,7 @@ div.setAttribute('order-state', 'canceled'); |
380 | 381 | - `elem.removeAttribute(name)` -- удалить атрибут. |
381 | 382 | - `elem.attributes` -- это коллекция всех атрибутов. |
382 | 383 |
|
383 | | -В большинстве случаев DOM-свойства окажутся очень полезными. Нужно использовать атрибуты только тогда, когда DOM-свойства не подходят нам, когда нужны именно атрибуты, например: |
| 384 | +В большинстве ситуаций предпочтительнее использовать DOM-свойства. Нужно использовать атрибуты только тогда, когда DOM-свойства не подходят, когда нужны именно атрибуты, например: |
384 | 385 |
|
385 | 386 | - Нужен нестандартный атрибут. Но если он начинается с `data-`, тогда нужно использовать `dataset`. |
386 | 387 | - Мы хотим получить именно то значение, которое написано в HTML. Значение DOM-свойства может быть другим, например, свойство `href` -- всегда полный URL, а нам может понадобиться получить "оригинальное" значение. |
0 commit comments