Criando, Adicionando, Substituindo e Removendo Elementos - JavaScript
O JavaScript oferece uma série de métodos para gerenciar elementos em uma página web. Especificamente, podemos criar e adicionar novos elementos ou substituir e remover os já existentes. Vamos examinar esses métodos.
Criando Elementos
Para criar elementos, o objeto document
: cria um elemento HTML, cuja tag é passada como parâmetro. Retorna o elemento criado.createElement(elementName)
: cria e retorna um nó de texto. O texto do nó é passado como parâmetro.createTextNode(text)
Vamos criar um elemento usando createElement
const header = document.createElement("h1"); // cria um cabeçalho <h1>
console.log(header); // <h1></h1>
Assim, a variável header
h1
Criemos um nó de texto usando createTextNode
const headerText = document.createTextNode("Hello World"); // cria um nó de texto
console.log(headerText); // "Hello World"
Adicionando Elementos
No entanto, criar elementos não é suficiente; eles também precisam ser adicionados à página web.
Para adicionar elementos, podemos usar um dos métodos do objeto Node
: adiciona o novo nóappendChild(newNode)
ao final da coleção de nós filhos.newNode
: adiciona o novo nóinsertBefore(newNode, referenceNode)
antes do nónewNode
.referenceNode
appendChild
Utilizemos o método appendChild()
const header = document.createElement("h1"); // cria um cabeçalho <h1>
const headerText = document.createTextNode("Hello World"); // cria um nó de texto
header.appendChild(headerText); // adiciona o nó de texto ao elemento h1
console.log(header); // <h1>Hello World</h1>
E para adicionar o elemento criado à página, devemos adicioná-lo a um elemento já existente na página:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<script>
const header = document.createElement("h1");
const headerText = document.createTextNode("Hello World");
header.appendChild(headerText);
document.body.appendChild(header); // adiciona o elemento h1 ao elemento body
</script>
</body>
</html>
Primeiro criamos um elemento de cabeçalho comum h1
body
Vale ressaltar que não é necessário criar um nó de texto adicional para definir o texto dentro de um elemento, pois podemos usar a propriedade textContent
const header = document.createElement("h1");
header.textContent = "Hello World"; // define o texto do elemento
Neste caso, o nó de texto é criado implicitamente quando o texto é definido.
insertBefore
O método appendChild()
insertBefore()
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<p>Texto 1</p>
<p>Texto 2</p>
<script>
const header = document.createElement("h1");
header.textContent = "Cabeçalho da Página"; // define o texto do elemento
const firstP = document.body.firstElementChild; // obtém o primeiro parágrafo
document.body.insertBefore(header, firstP); // adiciona o elemento h1 antes do primeiro parágrafo
</script>
</body>
</html>
Se precisarmos inserir um novo nó na segunda, terceira ou qualquer outra posição, precisaremos encontrar o nó antes do qual queremos inserir, usando combinações das propriedades firstElementChild
lastElementChild
nextSibling
previousSibling
Copiando Elementos
Às vezes, os elementos podem ser bastante complexos, e é muito mais fácil copiá-los do que recriar seu conteúdo usando chamadas separadas. Para copiar nós já existentes, o objeto Node
cloneNode()
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<div id="article">
<h1>Página Inicial</h1>
<p>Texto 1</p>
<p>Texto 2</p>
</div>
<script>
const article = document.getElementById("article");
// obtém o último parágrafo
const lastP = article.lastElementChild;
// clona o elemento lastP
const newLastP = lastP.cloneNode(true);
// altera o texto
newLastP.textContent = "Data de Publicação: 28/10/2023";
// adiciona ao final do elemento article
article.appendChild(newLastP);
</script>
</body>
</html>
No método cloneNode()
true
false
Substituindo Elementos
Para substituir um elemento, é utilizado o método replaceChild(newNode, oldNode)
Node
oldNode
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<div id="article">
<p>Página Inicial</p>
<p>Texto 1</p>
<p>Texto 2</p>
</div>
<script>
const article = document.getElementById("article");
// encontra o nó que será substituído
// vamos considerar que seja o primeiro elemento
const oldNode = article.firstElementChild;
// cria um novo elemento
const newNode = document.createElement("h2");
// define o texto para ele
newNode.textContent = "Hello World";
// substitui o antigo nó pelo novo
article.replaceChild(newNode, oldNode);
</script>
</body>
</html>
Neste caso, substituímos o primeiro elemento, que é um parágrafo, por um cabeçalho h2
Removendo Elementos
Para remover um elemento, é utilizado o método removeChild()
Node
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<div id="article">
<h1>Página Inicial</h1>
<p>Texto 1</p>
<p>Texto 2</p>
</div>
<script>
const article = document.getElementById("article");
// encontra o nó que será removido - o último parágrafo
const lastP = article.lastElementChild;
// remove o nó
article.removeChild(lastP);
</script>
</body>
</html>
Neste caso, removemos o último parágrafo do bloco div
Removendo Todos os Elementos
Às vezes, é necessário remover todos os elementos. Para isso, percorremos todos os elementos do contêiner e os removemos:
<div id="article">
<h1>Página Inicial</h1>
<p>Texto 1</p>
<p>Texto 2</p>
</div>
<script>
const article = document.getElementById("article");
while(article.firstChild) {
article.removeChild(article.firstChild);
}
</script>
Este script efetivamente limpa todos os conteúdos do elemento com o id "article", removendo cada um de seus nós filhos, um por um, até que não restem mais filhos.