Este documento foi feito baseando-se no site da DevMedia
O Document Object Model ou simplesmente DOM é utilizado pelo navegador Web para representar os elementos da página Web hierárquicamente possibilitando uma flexibilidade e customização desses 'objetos do documento' a um nível dificilmente superável.
O DOM que o JavaScript acessa é o objeto “document” criado pelo próprio navegador Web.
Tudo que esta no body da página html esta no DOM e neste objeto .
Através do objeto document pode-se ter acesso a um grande número de propriedades.
Segue abaixo algumas propriedades que podem ser utilizadas com o objeto document:
Propriedade | Descrição |
documentElement | Captura o elemento raiz <html> de um documento HTML. |
getElementById | Busca um elemento da página Web com o uso do atributo id do elemento. |
createElement | Cria um nodo elemento na página. |
createAttribute | Cria um nodo atributo na página. |
createTextNode | Cria um nó de texto na página. |
getElementsByTagName | Retorna um array dos elementos com o mesmo nome. |
appendChild | Insere um novo elemento filho. |
removeChild | Remove um elemento filho. |
parentNode | Retorna o nodo pai de um nodo. |
Segue abaixo um exemplo de uma árvore DOM de uma página Web.
Pode-se notar que todos os elementos da página Web estão disponíveis para serem manipulados.
Todas as páginas Web são estruturadas em uma forma de árvore do DOM.
Isso se deve ao fato de podermos ver uma página Web como uma árvore, com uma raiz como o elemento HTML e os
seus filhos como o HEAD e o BODY que por sua também possuem elementos filhos e assim sucessivamente.
Os elementos que não possuem filhos são chamados de nós folhas, como por exemplo os elementos
TITLE, STYLE, SCRIPT, LI, H1, P, TD demonstrados acima. Note que Text é um texto que está dentro de um
elemento. O nó <TD>
por exemplo também é considerado um nó, mas um nó de tipo diferente (tipo texto).
Essa estrutura de árvore é a forma que o navegador organiza as marcações do HTML, é dessa forma que o navegador
Web enxerga um documento HTML. A leitura da árvore se dá sempre da esquerda para a direita, assim teremos a
página Web original.
Uma boa prática para evitar que os navegadores apresentem a pagina Web de formas diferentes é sempre escrever HTML padrão, se possível sempre validando a página HTML. Fechar os elementos corretamente, utilizar tags atuais evitando as tags desatualizadas ajudam os navegadores a exibirem uma página Web de maneira correta.
As especificações do Object Document Model são publicadas pela World Wide Web Consortium (W3C).
Como visto anteriormente tem-se uma árvore na qual podemos percorrer-la utilizando a variável “document” no código Javascript. Como cada nó tem um pai e a maioria tem um nó filho, pode-se percorrer essa árvores DOM subindo e descendo nela usando essas conexões. Lembrando que tudo que há na árvore DOM é um nó e nisso incluímos também os textos, elementos, atributos e inclusive os comentários. Todos eles são agrupados pelo DOM em um objeto Node. Elementos e textos são tipos especiais de nós mas também são nós. Quando tivermos um nó podemos capturar seu nome com nodeName e seu valor com nodeValue. Porém, precisa-se tomar cuidado pois eles podem retornar um valor nulo como, por exemplo, no caso de acessarmos um nó de Elemento como o div que possui um nome mas não possui valor. Um nó de Texto por sua vez possui um valor mas não possui um nome.
É importante diferenciar o que é um nó de Texto e um nó de Elemento. Por exemplo, toma-se o HTML abaixo:
<html> <head> <title> Teste de Árvore DOM </title> </head> <body> <p> Você conhece sobre árvores DOM? Se não conhece aprenda em <a href=“www.devmedia.com.br”>www.devmedia.com.br</a> e seja o mais novo entendido sobre o assunto. </p> </body> </html>Nesse exemplo tem-se como exemplo de tipo de nós Elemento o “p” e o “a”.
if (algumNodo.nodeType == Node.ELEMENT_NODE) { //código aqui } else { if (algumNodo.nodeType == Node.TEXT_NODE) { //código aqui } }
<!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8" /> <title>Notifier</title> <script> function notify(text) { document.getElementById('msg').innerHTML += '<p>' + text + '</p>' titleFlick() } function titleFlick() { if (document.hasFocus()) { document.title = 'Notifier' return } document.title = document.title == 'Notifier' ? '* Notifier' : 'Notifier' setTimeout('titleFlick()', 500) } </script> </head> <body> <input type="button" id="notify" value="Notify in 5 seconds" onclick="notify('Will notify in 5 seconds...');setTimeout('notify(\'Event shoot!\')',5000)" /> <div id="msg"></div> </body> </html>Caso você queira criar um exemplo de tabelas zebradas usando DOM, você pode fazer facilmente usando o código abaixo.