DOM
O que é o DOM?
No início, o JavaScript e o DOM estavam fortemente interligados, mas, eventualmente, evoluíram para entidades separadas. O conteúdo da página é armazenado no DOM e pode ser acessado e manipulado via JavaScript.
Embora o DOM seja frequentemente acessado usando JavaScript, não é uma parte da linguagem JavaScript. Ele também pode ser acessado por outras linguagens.
Quando uma página da web é totalmente carregada, o navegador cria um DOM da página. O DOM é a representação de dados dos objetos que compõem a estrutura e o conteúdo de um documento na web.
O DOM trata um documento como uma árvore de objetos em que cada nó representa uma parte do documento. Para permitir que você entenda a árvore de objetos DOM.
Vamos converter os elementos HTML do código abaixo em uma árvore de objetos DOM.
E como você pode ver, o primeiro elemento <html>
no código é o nó mãe da árvore, enquanto os elementos <head>
e <body>
são nós filhos do nó mãe <html>
. O <title>
e os <meta>
são filhos do elemento <head>
, enquanto os elementos <h1>
e o <p>
são nós filhos do elemento <body>
. Se você já ouviu falar sobre a árvore genealógica em biologia, pense na árvore de objetos DOM como uma réplica semelhante da árvore genealógica
Acessando o DOM
Você não precisa fazer nada de especial para começar a usar o DOM, todo navegador usa um modelo de objeto de documento para tornar as páginas da web acessíveis via JavaScript.
Métodos de acesso DOM
O DOM possui muitos métodos, são eles que fazem a ligação entre os nodes (elementos) e os eventos. Vamos estudar os métodos mais usados lembrando que existem muitos outros e você pode ver todos nesse link.
Selecionando elementos pela identificação
Qualquer elemento HTML pode ter um atributo id. O valor desse atributo deve ser único dentro do documento - dois elementos no mesmo documento não podem ter a mesma identificação. Você pode selecionar um elemento com base nessa identificação exclusiva com o método getElementById
do objeto document.
Selecionando elementos pelo nome
A atributo HTML name
se destinava originalmente a atribuir nomes a elementos de formulário e o valor desse atributo é usado quando dados de formulário são enviados para um servidor. Assim como o atributo id
, name
atribui um nome a um elemento. Ao contrário de id
, contudo, o valor de um atributo name não precisa ser único: vários elementos podem ter o mesmo nome e isso é comum no caso de botões de seleção e caixa de seleção em formulários web. Além disso ao contrário de id, o atributo name é válido somente em alguns elementos HTML, incluindo formulários, elementos de formulário, tag iframe e tag img.
Selecionando elementos pela tag
getElementsByTagName
permite você percorrer o DOM procurando por todos os elementos em sua página com um nome de tag especificado. Aqui está a sintaxe:
Selecionando elementos pela classe CSS
O método getElementsByClassName
que nos permite selecionar conjuntos de elementos do documento com base nos identificadores que estão em seu atributo class. A função retorna um NodeList contendo todos os descendentes coincidentes do documento ou elemento.
Como parâmetro, ela recebe um único argumento de string e retorna os elementos que coincidirem com a classe seletora repassada no argumento.
Selecionando elementos através dos seletores CSS
A função querySelectorAll()
recebe um argumento de string contendo um seletor CSS e retorna um objeto NodeList representando os elementos do documento que correspondem ao seletor.
Temos a função querySelector()
que retorna somente o primeiro (na ordem do documento) elemento coincidente ou null, caso não haja elementos correspondentes.
Métodos node
node
Tenho certeza de que poderia escrever alguns parágrafos sobre os diferentes métodos de acessar "nós" no DOM, mas acho que uma visão geral básica das possibilidades será suficiente para nossos propósitos aqui. Um "nó" é essencialmente qualquer elemento da sua página na estrutura do DOM, incluindo espaço em branco e texto entre tags HTML.
Os diferentes métodos de nó disponíveis através da manipulação do DOM são os seguintes:
Em cada exemplo acima, o node
seria o objeto que você está fazendo referência. Vamos ilustrar a diversidade desses métodos usando um exemplo simples:
Após ter selecionado um elemento do documento, às vezes você precisa encontrar partes estruturalmente relacionada:
Localizando um pai (parent)
Todo nó de elemento possui um pai, exceto o nó do documento. Consequentemente, cada nó de elemento tem uma propriedade chamada parentNode, uma referência para o pai do elemento distinto.
Localizando filhos (childrens)
Um elemento só pode ter um pai (parent), mas pode ter muitos filhos (childrens). Você pode encontrar todos os filhos de um elemento, usando a propriedade childNodes. Ela é, na verdade, uma lista de nós que contém todos os filhos do elemento, no ordem de origem.
Localizando irmãos (siblings)
Assim como podemos navegar para cima e para baixo na árvore DOM, também podemos ir de um lado para o outro, obtendo o próximo nó ou o anterior (ambos no mesmo nível). As propriedades que utilizamos para isso são nextSibling e previousSibling.
Acessando os atributos
Os elementos HTML consistem em um nome de tag e um conjunto de pares nome/valor conhecidos como atributos. Por exemplo, o elemento <a>
que define um hiperlink utiliza o valor de seu atributo href
como destino do link.
Os valores de atributo dos elementos HTML estão disponíveis como propriedades dos objetos HTMLElement
que representam esses elementos. Dessa forma:
Manipulando o DOM
Podemos criar, inserir e excluir elementos da árvore DOM.
A função document.createElement()
aceita como parâmetro o nome da tag e retorna o elemento recém criado (mas ainda não inserido).
Vamos adiconar um item na lista criada anteriormente com o valor Graphql
Você pode ver nesse link outras formas de adicionar e remover elementos no DOM.
Resumo
document.createElement("nome-da-tag")
para criar um elementodocument.createTextNode("algum texto")
para criar um nó de textoelemento_pai.appendChild(elemento_filho)
para inserir um elemento na última posiçãoelemento_pai.insertBefore(elemento_filho, elemento_anterior)
pra inserir um elemento em posição específicaelemento_pai.removeChild(elemento_filho)
para remover um elemento
Referências
Last updated