Busca de Elementos em Páginas Web - JavaScript
O objeto document oferece vários métodos para buscar e manipular elementos em páginas web:
: seleciona o elemento cujo atributogetElementById(value)
é igual aid
. Se não houver um elemento com esse identificador, retornavalue
.null
: seleciona todos os elementos cuja tag é igual agetElementsByTagName(value)
. Retorna uma lista de elementos (tipovalue
), que é semelhante a um array.NodeList
: seleciona todos os elementos que têm a classegetElementsByClassName(value)
. Retorna uma listavalue
.NodeList
: seleciona todos os elementos cujo nome égetElementsByName(value)
. Retorna uma listavalue
.NodeList
: seleciona o primeiro elemento que corresponde ao seletor CSSquerySelector(value)
.value
: seleciona todos os elementos que correspondem ao seletor CSSquerySelectorAll(value)
. Retorna uma listavalue
.NodeList
Obtendo elementos por id
Por exemplo, vamos encontrar um elemento pelo id:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<h1 id="header">Página Inicial</h1>
<script>
const headerElement = document.getElementById("header");
console.log("Texto: ", headerElement.innerText); // Texto: Página Inicial
</script>
</body>
</html>
Usando a chamada document.getElementById("header")
id="header"
innerText
É importante observar que se o elemento não for encontrado, o método retorna null
null
Busca por uma tag específica
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<h1>Página Inicial</h1>
<p>Primeiro parágrafo</p>
<p>Segundo parágrafo</p>
<script>
const paragraphs = document.getElementsByTagName("p");
for (const p of paragraphs) {
console.log(p.innerText); // exibindo o texto do parágrafo
}
</script>
</body>
</html>
Usando a chamada document.getElementsByTagName("p")
NodeList
Saída do console:
Primeiro parágrafo Segundo parágrafo
Se precisarmos obter apenas o primeiro elemento, podemos acessar o primeiro elemento da coleção encontrada:
const p = document.getElementsByTagName("p")[0];
console.log(p.innerText);
Se não houver elementos com a tag especificada na página, um lista vazia é retornada. Usando a propriedade length
const paragraphs = document.getElementsByTagName("p");
console.log(paragraphs.length); // Exibe o número de parágrafos encontrados
Para percorrer a lista, naturalmente podemos usar outros tipos de loops:
const paragraphs = document.getElementsByTagName("p");
for (let i = 0; i < paragraphs.length; i++) {
console.log(paragraphs[i].innerText);
}
Obtendo elementos por classe
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<h1>Página Inicial</h1>
<p class="text">Texto da Página</p>
<p class="contacts">Email: supercorp@gmail.com</p>
<p class="contacts">Telefone: +1-234-567-8901</p>
<script>
const contacts = document.getElementsByClassName("contacts");
for (const contact of contacts) {
console.log(contact.innerText);
}
</script>
</body>
</html>
Neste caso, selecionamos todos os elementos com a classe "contacts".
Saída do console:
Email: supercorp@gmail.com Telefone: +1-234-567-8901
Obtendo elementos pelo Atributo name
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<form>
<p>Idioma:</p>
<input type="radio" name="lang" value="Java">
<label>Java</label>
<br>
<input type="radio" name="lang" value="JavaScript" checked>
<label>JavaScript</label>
<br>
<input type="radio" name="lang" value="PHP">
<label>PHP</label>
<br>
</form>
<script>
const langs = document.getElementsByName("lang");
for (const lang of langs) {
console.log(lang.value); // obtendo o valor do atributo value
}
</script>
</body>
</html>
Neste caso, selecionamos todos os elementos cujo atributo name
value
Java JavaScript PHP
Vale ressaltar que este método pode funcionar de maneira um pouco diferente em navegadores antigos como o Internet Explorer ou Opera. Em particular, ele seleciona um elemento se o seu atributo name
id
Buscando Elementos por Seletor CSS
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<div class="annotation">
<p>Anotação do Artigo</p>
</div>
<div class="text">
<p>Primeiro parágrafo</p>
<p>Segundo parágrafo</p>
</div>
<script>
const elem = document.querySelector(".annotation p");
console.log(elem.innerText); // Anotação do Artigo
</script>
</body>
</html>
A expressão document.querySelector(".annotation p")
.annotation p
Para obter todos os elementos por um seletor, pode-se usar de forma semelhante o método document.querySelectorAll
NodeList
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<div class="annotation">
<p>Anotação do Artigo</p>
</div>
<div class="text">
<p>Primeiro parágrafo</p>
<p>Segundo parágrafo</p>
</div>
<script>
const elements = document.querySelectorAll(".text p");
for (const elem of elements) {
console.log(elem.innerText);
}
</script>
</body>
</html>
Saída do console:
Primeiro parágrafo Segundo parágrafo
Buscando em Elementos Aninhados
De forma semelhante, podemos buscar elementos não apenas em todo o documento, mas também em elementos específicos em uma página da web. Por exemplo:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<div id="article">
<h1 id="header">Página Inicial</h1>
<p class="text">Texto da Página 1</p>
<p class="text">Texto da Página 2</p>
</div>
<div id="footer">
<p class="text">Texto do Rodapé</p>
</div>
<script>
// obtemos o elemento com id="article"
const article = document.getElementById("article");
// neste elemento, obtemos todos os elementos com class="text"
const articleContent = article.getElementsByClassName("text");
for (const p of articleContent) {
console.log(p);
}
</script>
</body>
</html>
Neste caso, primeiro obtemos o elemento com id="article"
"text"
Texto da Página 1 Texto da Página 2
Seletores CSS
Segue uma lista resumida dos seletores CSS básicos que podemos usar para buscar elementos:
: seleciona todos os elementos*
: seleciona todos os elementos do tipoE
E
: seleciona todos os elementos com o atributo[a]
a
: seleciona todos os elementos nos quais o atributo[a="b"]
tem o valora
b
: seleciona todos os elementos nos quais o atributo[a~="b"]
tem uma lista de valores, e um desses valores éa
b
: seleciona todos os elementos nos quais o valor do atributo[a^="b"]
começa coma
b
: seleciona todos os elementos nos quais o valor do atributo[a$="b"]
termina coma
b
: seleciona todos os elementos nos quais o valor do atributo[a*="b"]
contéma
substringa
b
: seleciona todos os elementos nos quais o valor do atributo[a|="b"]
é uma série de valores separados por hífens, e o primeiro desses valores éa
b
: seleciona o elemento raiz do documento:root
: seleciona o n-ésimo elemento filho (a contagem começa do início):nth-child(n)
: seleciona o n-ésimo elemento filho (a contagem começa do fim):nth-last-child(n)
: seleciona o n-ésimo elemento irmão do tipo type (a contagem começa do início):nth-of-type(n)
: seleciona o n-ésimo elemento irmão do tipo type (a contagem começa do fim):nth-last-of-type(n)
: seleciona o primeiro elemento filho:first-child
: seleciona o último elemento filho:last-child
: seleciona o primeiro elemento irmão do tipo type:first-of-type
: seleciona o último elemento irmão do tipo type:last-of-type
: seleciona todos os elementos que têm apenas um elemento filho:only-child
: seleciona todos os elementos irmãos do tipo type:only-of-type
: seleciona todos os elementos que não têm elementos filhos:empty
: seleciona todos os links que ainda não foram clicados:link
: seleciona todos os links que já foram visitados:visited
: seleciona todos os links que estão sendo clicados no momento:active
: seleciona todos os links sob os quais o cursor está no momento:hover
: seleciona todos os elementos que estão focados no momento:focus
: seleciona todos os elementos que podem ser referenciados com URLs dentro da página:target
: seleciona todos os elementos onde o atributo:lang(en)
é "en"lang
: seleciona todos os elementos de formulários que estão habilitados:enabled
: seleciona todos os elementos de formulários que estão desabilitados:disabled
: seleciona todos os checkboxes e botões de rádio que estão marcados:checked
: seleciona todos os elementos com a classe.class
class
: seleciona todos os elementos com o identificador#id
id
: seleciona todos os elementos que não correspondem ao seletor:not(s)
s
: seleciona todos os elementos do tipo F que são descendentes de elementos do tipoE F
E
: seleciona todos os elementos do tipoE > F
que são filhos diretos de elementos do tipoF
E
: seleciona todos os elementos do tipoE + F
que estão imediatamente após um elemento do tipoF
E
: seleciona todos os elementos do tipoE ~ F
que são irmãos de um elemento do tipoF
E
Observações Adicionais
É importante notar que dentre todos esses métodos, a busca por id
getElementById()
Também para otimização do trabalho com o DOM, a fim de evitar a repetição da seleção dos mesmos elementos, é melhor salvar os elementos selecionados em constantes/variáveis na primeira seleção.
Vários métodos - getElementsByTagName()
getElementsByClassName()
getElementsByName()
querySelectorAll()
querySelectorAll()