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
+34-36Lines changed: 34 additions & 36 deletions
Original file line number
Diff line number
Diff line change
@@ -1,26 +1,26 @@
1
1
# Atributos e propriedades
2
2
3
-
Quando navegador carrega a página, ele "lê" (outra palavra: "analisa") o HTML e gera objetos DOM a partir dela. Para nós de elementos, a maior parte dos atributos HTML padrão automaticamente se tornam propriedades de objetos DOM.
3
+
Quando navegador carrega a página, ele "lê" (em outras palavras: "analisa") o HTML e gera objetos DOM a partir dela. Para nós de elementos, a maioria dos atributos HTML padronizados automaticamente se tornam propriedades de objetos DOM.
4
4
5
5
Por exemplo, se a tag é `<body id="page">`, então o objeto DOM tem `body.id="page"`.
6
6
7
-
Mas o mapeamento atributo-propriedade não é de um para um! Nesse capítulo vamos prestar atenção em separar essas duas noções, entender como trabalhar com eles, quando eles são os mesmos e quando eles são diferentes.
7
+
Mas o mapeamento entre atributo e propriedade não é de um para um! Nesse capítulo vamos prestar atenção em separar essas duas noções, entender como trabalhar com eles, quando eles são os mesmos e quando eles são diferentes.
8
8
9
9
## Propriedades DOM
10
10
11
-
Nós já vimos propriedades DOM incorporadas. Há várias. Mas tecnicamente ninguém nos limita, e se não há propriedades suficientes, nós podemos adicionar nossas próprias.
11
+
Nós já vimos propriedades DOM incorporadas. Há várias delas, mas tecnicamente ninguém nos limita, e se não há propriedades suficientes, nós podemos adicionar nossas próprias.
12
12
13
-
Nós DOM são objetos JavaScript. Nós podemos alterar eles.
13
+
Nós do DOM são objetos JavaScript comuns. Nós podemos alterar eles.
14
14
15
15
Por exemplo, vamos criar uma propriedade nova em `document.body`:
document.body.sayTagName(); // BODY (o valor de "this" no método é document.body)
34
34
```
35
35
36
-
Nós também podemos modificar prototypes incorporados como `Element.prototype` e adicionar novos métodos para todos elements:
36
+
Também podemos modificar prototypes incorporados como o `Element.prototype` e adicionar novos métodos para todos os elementos:
37
37
38
38
```js run
39
39
Element.prototype.sayHi=function() {
40
-
alert(`Olá, eu sou um${this.tagName}`);
40
+
alert(`Hello, I'm${this.tagName}`);
41
41
};
42
42
43
-
document.documentElement.sayHi(); //Olá, eu sou um HTML
44
-
document.body.sayHi(); //Olá, eu sou um BODY
43
+
document.documentElement.sayHi(); //Hello, I'm HTML
44
+
document.body.sayHi(); //Hello, I'm BODY
45
45
```
46
46
47
-
Então, propriedades e métodos do DOM se comportam como qualquer objeto JavaScript:
47
+
Então, propriedades do DOM e métodos se comportam como qualquer outro objeto JavaScript:
48
48
49
49
- Podem ter qualquer valor.
50
50
- São sensíveis a letras maiúsculas e minúsculas (escreva `elem.nodeType`, não `elem.NoDeTyPe`).
51
51
52
52
## Atributos HTML
53
53
54
-
Em HTML, tags podem ter atributos. Quando o navegador analisa o HTML para criar objetos DOM para tags, ele reconhece atributos *padrões* e cria propriedades DOM para eles.
54
+
Em HTML, tags podem ter atributos. Quando o navegador analisa o HTML para criar objetos DOM para as tags, ele {"type": {"type": "text"}} atributos *padronizados* e cria propriedades DOM para eles.
55
55
56
-
Então quando um elemento tem `id` ou outro atributo *padrão*, a propriedade correspontente é criada. Mas isso não acontece se o atributo não for padrão.
56
+
Então quando um elemento tem `id` ou outro atributo *padrão*, a propriedade correspondente é criada. Mas isso não acontece se o atributo não for padrão.
57
57
58
58
Por exemplo:
59
59
```html run
60
60
<bodyid="test"something="non-standard">
61
61
<script>
62
62
alert(document.body.id); // test
63
63
*!*
64
-
//Atributo não padrão não resulta em uma propriedade
64
+
//atributo não padronizado não resulta em uma propriedade
65
65
alert(document.body.something); // undefined
66
66
*/!*
67
67
</script>
68
68
</body>
69
69
```
70
70
71
-
Observe que um atributo padrão para um elemento pode ser desconhecido para outro elemento. Por exemplo, `"type"` é padrão para `<input>`([HTMLInputElement](https://html.spec.whatwg.org/#htmlinputelement)), mas não para `<body>` ([HTMLBodyElement](https://html.spec.whatwg.org/#htmlbodyelement)). Atributos padrão são descritos na especificação da classe correspondente ao elemento.
71
+
Observe que um atributo padrão para um elemento pode ser desconhecido para outro elemento. Por exemplo, `"type"` é padronizado para `<input>`([HTMLInputElement](https://html.spec.whatwg.org/#htmlinputelement)), mas não para `<body>` ([HTMLBodyElement](https://html.spec.whatwg.org/#htmlbodyelement)). Atributos padrão são descritos na especificação da classe correspondente ao elemento.
72
72
73
73
Aqui nós podemos ver:
74
74
```html run
@@ -77,7 +77,7 @@ Aqui nós podemos ver:
77
77
<script>
78
78
alert(input.type); // text
79
79
*!*
80
-
alert(body.type); // undefined: DOM property not created, because it's non-standard
80
+
alert(body.type); // undefined: Propriedade DOM não criada, porque não é padrão
81
81
*/!*
82
82
</script>
83
83
</body>
@@ -87,10 +87,10 @@ Então, se um atributo não é padrão, não há uma propriedade DOM para ele. H
87
87
88
88
Claro. Todos atributos são acessíveis usando os seguintes métodos:
89
89
90
-
-`elem.hasAttribute(name)` -- checa a existencia do valor.
90
+
-`elem.hasAttribute(name)` -- checa a existência do valor.
91
91
-`elem.getAttribute(name)` -- obtém o valor.
92
-
-`elem.setAttribute(name, value)` -- define um valor.
93
-
-`elem.removeAttribute(name)` -- remove um atributo.
92
+
-`elem.setAttribute(name, value)` -- define o valor.
93
+
-`elem.removeAttribute(name)` -- remove o atributo.
94
94
95
95
Esses métodos operam exatamente com o que está escrito no HTML.
96
96
@@ -124,9 +124,9 @@ Aqui está uma demonstração estendida de como trabalhar com atributos:
124
124
125
125
elem.setAttribute('Test', 123); // (2), definindo
126
126
127
-
alert( elem.outerHTML ); // (3), checar se o atributo está no HTML(sim)
127
+
alert( elem.outerHTML ); // (3), checando se o atributo está no HTML(sim)
128
128
129
-
for (let attr ofelem.attributes) { // (4) lista todos
129
+
for (let attr ofelem.attributes) { // (4) listando todos
130
130
alert( `${attr.name} = ${attr.value}` );
131
131
}
132
132
</script>
@@ -135,7 +135,7 @@ Aqui está uma demonstração estendida de como trabalhar com atributos:
135
135
136
136
Observe:
137
137
138
-
1.`getAttribute('About')` -- a primeira letra aqui está em maiúsculo, e no HTML está totalmente em minúsculo. Mas isso não importa: nomes de atributos são insensíveis à caixa alta ou baixa.
138
+
1.`getAttribute('About')` -- a primeira letra aqui está em maiúsculo, e no HTML está totalmente em minúsculo. Mas isso não importa: nomes de atributos são insensíveis a caixa alta ou baixa.
139
139
2. Nós podemos assinalar qualquer coisa a um atributo, mas se tornará uma string. Então aqui temos `"123"` como o valor.
140
140
3. Todos os atributos, incluindo os que estão definidos, são visíveis no `outerHTML`.
141
141
4. A coleção `attributes` é iterável e tem todos os atributos do elemento (padrões e não padrões) como objetos com propriedades `name` e `value`.
@@ -145,7 +145,6 @@ Observe:
145
145
Quando um campo padrão muda, a propriedade correspondente é automaticamente atualizada, e (com algumas exceções) vice-versa.
146
146
147
147
No exemplo abaixo `id` é modificado como um atributo, e nós podemos ver a propriedade mudada também. E o oposto também ocorre:
148
-
In the example below `id` is modified as an attribute, and we can see the property changed too. And then the same backwards:
149
148
150
149
```html run
151
150
<input>
@@ -211,7 +210,7 @@ Há outros exemplos. O campo `style` é uma string, mas a propriedade `style` é
@@ -245,13 +244,13 @@ As vezes, atributos não padronizados são úteis para passar dados customizados
245
244
Bem assim:
246
245
247
246
```html run
248
-
<!-- marca a div para mostra "name" aqui-->
247
+
<!-- marca a div para mostrar "name" aqui-->
249
248
<div*!*show-info="name"*/!*></div>
250
-
<!--and age here-->
249
+
<!--e a idade aqui-->
251
250
<div*!*show-info="age"*/!*></div>
252
251
253
252
<script>
254
-
// o código encontra um elemento com a marca e mostra o que foi requisitado
253
+
// o código encontra o elemento marcado e mostra o que foi requisitado
255
254
let user = {
256
255
name:"Pete",
257
256
age:25
@@ -260,7 +259,7 @@ Bem assim:
260
259
for(let div ofdocument.querySelectorAll('[show-info]')) {
261
260
// insere a informação correspondente no campo
262
261
let field =div.getAttribute('show-info');
263
-
div.innerHTML= user[field]; // primeiro Pete em "name", então 25 em "age"
262
+
div.innerHTML= user[field]; // primeiro Pete em "name", e então 25 em "age"
264
263
}
265
264
</script>
266
265
```
@@ -307,14 +306,13 @@ Porque um atributo é mais conveniente de se gerenciar. O estado pode ser mudado
307
306
div.setAttribute('order-state', 'canceled');
308
307
```
309
308
310
-
Mas podem haver possíveis problemas com atributos customizados. O que acontece se usarmos um atributos não padronizado e depois ele é introduzido como um padrão funcional? A linguagem HTML é viva e está crescendo, e mais atributos aparecem para atender as necessidades dos desenvolvedores. Isso pode causar efeitos inesperados em tais casos.
309
+
Mas podem haver possíveis problemas com atributos customizados. E se usarmos um atributo não padronizado e depois ele for introduzido como um atributo padrão? A linguagem HTML é viva e está crescendo, e mais atributos aparecem para atender as necessidades dos desenvolvedores. Isso pode causar efeitos inesperados em tais casos.
311
310
312
311
Para evitar tais conflitos, existem os atributos [data-*](https://html.spec.whatwg.org/#embedding-custom-non-visible-data-with-the-data-*-attributes).
313
312
314
313
**Todos os atributos começando com "data-" são reservados para programadores usarem. Eles estão disponíveis na propriedade `dataset`.
315
314
316
-
Por exemplo, se um `elem` tiver um atributo chamado `"data-about"`, estará disponível em `elem.dataset.about`.
317
-
For instance, if an `elem` has an attribute named `"data-about"`, it's available as `elem.dataset.about`.
315
+
Por exemplo, se um `elem` tiver um atributo chamado `"data-about"`, ele estará disponível em `elem.dataset.about`.
318
316
319
317
Bem assim:
320
318
@@ -327,7 +325,7 @@ Bem assim:
327
325
328
326
Atributos com várias palavras como `data-order-state` são definidas em camel case: `dataset.orderState`.
329
327
330
-
Aqui vai um exemplo "estado do pedido" reescrito:
328
+
Aqui vai um exemplo "order state" reescrito:
331
329
332
330
```html run
333
331
<style>
@@ -359,9 +357,9 @@ Aqui vai um exemplo "estado do pedido" reescrito:
359
357
360
358
Usar atributos `data-*` é uma forma válida e segura de passar dados customizados.
361
359
362
-
Observe que estamos não limitados ler, como bem podemos também modificar os dados. Então o CSS atualiza o visual de acordo: no exemplo acima, a última linha `(*)` muda a cor para azul.
360
+
Observe que estamos não limitados ler, como bem podemos modificar os dados. Então o CSS atualiza o visual de acordo: no exemplo acima, a última linha `(*)` muda a cor para azul.
363
361
364
-
## Summary
362
+
## Sumário
365
363
366
364
- Atributos -- é o que está escrito no HTML.
367
365
- Propriedades -- é o que está escrito nos objetos DOM.
@@ -379,9 +377,9 @@ Métodos para trabalhar com atributos são:
379
377
-`elem.getAttribute(name)` -- para obter o valor.
380
378
-`elem.setAttribute(name, value)` -- para definir o valor.
381
379
-`elem.removeAttribute(name)` -- para remover o atributo.
382
-
-`elem.attributes` é a coleção com todos os atributos.
380
+
-`elem.attributes` é uma coleção com todos os atributos.
383
381
384
382
Para a maioria das situações, usar propriedades DOM tem preferência. Nós devemos nos referir a atributos apenas quando propriedades DOM não são cabíveis, quando precisamos de atributos exatos, por exemplo:
385
383
386
384
- Quando precisamos de atributos não padronizados. Mas se começar com `data-`, então devemos usar `dataset`.
387
-
- Quando precisamos ler o valor "a risca" no HTML. O valor da propriedade DOM pode ser diferente, por exemplo, o `href` é sempre uma URL completa, e nós talvez queremos o valor "original".
385
+
- Quando precisamos ler o valor do HTML "a risca". O valor da propriedade DOM pode ser diferente, por exemplo, o `href` é sempre uma URL completa, e nós talvez queremos o valor "original".
0 commit comments