O que é o DOM, de verdade?

Prévia grátis 4 min de leitura

O arquivo HTML e a coisa que o navegador usa são diferentes

Comece por um fato sobre toda página que uma app Rails serve. O HTML que seu servidor envia pela rede é só texto, uma sequência de caracteres como qualquer outro arquivo. Quando um navegador recebe esse texto, ele constrói outra coisa a partir dele: uma árvore viva de objetos na memória, chamada DOM (Document Object Model). Tudo que você vai fazer com CSS, JavaScript, e depois com o Hotwire, tem como alvo aquela árvore, não o arquivo de texto original.

De texto para árvore

<body>
  <h1>Welcome</h1>
  <p>Hello, world.</p>
</body>

O navegador lê esse texto de cima para baixo e constrói uma estrutura onde cada tag vira um objeto com um lugar numa hierarquia:

              body
             /    \
           h1      p
            |       |
        "Welcome" "Hello, world."

Aquele diagrama é o DOM. Nele, o h1 é um objeto com propriedades e métodos. Ele tem um pai (body) e um filho, o nó de texto "Welcome".

Por que "modelo de objetos" é o nome certo

Todo nó daquela árvore é um objeto que você pode inspecionar e mudar. Ele tem um tipo, atributos, uma lista de filhos e uma referência ao pai. É assim que o JavaScript muda uma página depois que ela carrega. Ele altera os objetos que o navegador está desenhando na tela, sem tocar em arquivo HTML nenhum.

Onde uma app Rails se encaixa nesse quadro

Rails renderiza ERB ──▶ envia texto HTML pelo HTTP ──▶ navegador faz o parsing ──▶ constrói o DOM ──▶ renderiza pixels

Seus arquivos app/views/*.erb, suas chamadas de render, tudo na camada de views do Rails: tudo isso existe para produzir aquele texto HTML. O DOM é o que acontece depois, inteiramente dentro do navegador, completamente fora do controle do Rails. Essa fronteira importa quando você chegar no Hotwire e no Turbo, mais adiante no roteiro. Essas ferramentas pegam HTML do servidor e atualizam o DOM vivo com ele, em vez de o navegador carregar uma página nova.

Uma prova rápida e concreta

Abra qualquer página web, clique com o botão direito, e compare duas coisas:

  • View Page Source: mostra o texto HTML original do mesmo jeito que o servidor enviou, nunca mudando
  • Inspect (o painel Elements das DevTools, tema da Aula 3): mostra o DOM atual, que pode diferir do código-fonte assim que algum JavaScript roda

Numa página cheia de JavaScript, as duas visões costumam discordar milissegundos depois do carregamento. O DOM é uma coisa separada e viva, que partiu do arquivo e seguiu adiante.

Como este curso está organizado

  • Aula 2: nós, elementos e o formato da árvore
  • Aula 3: olhando um DOM ao vivo com as DevTools do navegador
  • Aula 4: como seletores CSS usam relações de árvore para alcançar elementos
  • Aula 5: como o JavaScript (e o Hotwire/Turbo do Rails) muda o DOM depois do carregamento
  • Aula 6: termos que você vai continuar encontrando: render tree, reflow, virtual DOM
  • Aula 7: lendo a árvore DOM de uma página de verdade, de ponta a ponta

Pontos-chave

  • HTML é texto; o DOM é a árvore viva, na memória, de objetos que um navegador constrói a partir desse texto.
  • Todo nó do DOM é um objeto real com um tipo, atributos, filhos, e um pai, não uma string.
  • O Rails produz texto HTML; o navegador transforma isso no DOM inteiramente por conta própria, fora do controle do Rails.
  • O View Source mostra o HTML original; o Inspect mostra o DOM atual: eles podem divergir no momento em que qualquer JavaScript roda.
Aula 1 de 7 · grátis

Continue com a aula 2

Nós, elementos, e a árvore

Apresenta nós de elemento, texto e comentário, termos como pai e descendente, a raiz document e os atributos.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...