Olá,
Complementando a resposta do Wanderson. O querySelectorAll
é uma função mais completa pois permite que você faça diferentes combinações de seletores complexos, seja usando ids, classname, type, etc. Já o getElementsByClassName
só permite a seleção de elementos pela classname, o que pode ser sua intenção, ou não.
Veja exemplos
- Utilizando classname para setar os links para outra cor.
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>exemplo alura</title>
<style>
#clicks, #links {
float: left;
margin: 0 5px;
}
#links {
border-left: #cacaca 1px solid;
padding-left: 10px;
}
</style>
</head>
<body>
<a href="/external-link/01" class="external-link">Link 01</a>
<br>
<a href="/external-link/02" class="external-link">Link 02</a>
<br>
<a href="/external-link/03" class="external-link">Link 03</a>
<br>
<a href="/external-link/04" class="external-link">Link 04</a>
<br>
<a href="/external-link/05" class="external-link">Link 05</a>
<br>
<a href="/external-link/06" class="external-link">Link 06</a>
<br>
<a href="/external-link/07" class="external-link">Link 07</a>
<br>
<a href="/external-link/08" class="external-link">Link 08</a>
<br>
<a href="/external-link/09" class="external-link">Link 09</a>
<br>
<a href="/external-link/10" class="external-link">Link 10</a>
<br>
</body>
</html>
Javascript
var $links = document.getElementsByClassName('external-link');
[].slice.call( $links ).forEach(function( element, index ) {
element.onclick = function( event ) {
event.preventDefault();
this.style.backgroundColor = "chartreuse";
};
});
Agora vamos imaginar que você queira pegar apenas o link "/external-link/08" com getElementsByClassName
não seria possível.
Já com querySelectorAll
é
var $links = document.querySelectorAll('.external-link[href="/external-link/08"]');
[].slice.call( $links ).forEach(function( element, index ) {
element.onclick = function( event ) {
event.preventDefault();
this.style.backgroundColor = "chartreuse";
};
});
Um último adendo é que o getElementsByClassName
é mais rápido já que não faz uma busca tão completa como o querySelectorAll
https://jsperf.com/getelementsbyclassname-vs-queryselectorall
Att.