Przykład prawdziwego czystego kodu JavaScript do manipulacji DOM – obsługi paska nawigacyjnego, użytego w większym projekcie, korzystającym z frameworka. Codzienna dawka czystego JS.
Nasz kod po pierwsze zabezpieczony jest przed zbyt wczesnym uruchomieniem, zanim jeszcze DOM nie jest wyrenderowany:
window.addEventListener('DOMContentLoaded', function(){
(...)
});
Nasz kod po załadowaniu drzewa DOM rozpoczyna pobieranie potrzebnych mu elementów za pomocą query selectora:
window.addEventListener('DOMContentLoaded', function(){
let hamBtn = document.querySelector("#hamBtn");
let hamburger = document.querySelector("#hamburger-navbar");
let searchIpt = document.querySelector("#search");
let searchBtn = document.querySelector("#searchBtn");
});
Guzik hamburger wykonuje toggle (włącz/wyłącz klasę) na elemencie hamburger dla klasy „hide” (możemy się domyślić, że jest to klasa ukrywająca hamburger menu, domyślnie włączona):
window.addEventListener('DOMContentLoaded', function(){
let hamBtn = document.querySelector("#hamBtn");
let hamburger = document.querySelector("#hamburger-navbar");
hamBtn.addEventListener("click", function(){
hamburger.classList.toggle('hide');
});
let searchIpt = document.querySelector("#search");
let searchBtn = document.querySelector("#searchBtn");
});
Dalej nasz kod po wciśnięciu guzika szukaj pobiera wartość inputu tekstowego o nazwie searchIpt:
window.addEventListener('DOMContentLoaded', function(){
let hamBtn = document.querySelector("#hamBtn");
let hamburger = document.querySelector("#hamburger-navbar");
hamBtn.addEventListener("click", function(){
hamburger.classList.toggle('hide');
});
let searchIpt = document.querySelector("#search");
let searchBtn = document.querySelector("#searchBtn");
searchBtn.addEventListener('click', function(e){
if(searchIpt.value.trim().length === 0)
{
e.preventDefault();
return
}
let url = `https://YOUR_URL_HERE/?s=${encodeURIComponent(searchIpt.value)}`;
window.location.replace(url);
});
});
Prevent default tutaj nie jest potrzebny, bo nie pracujemy na formularzu, ale dobrze obrazuje co zazwyczaj byśmy robili – to jest blokujemy wyszukiwanie jeżeli długość tekstu (bez spacji) jest równa 0.
Dalej, mamy url, do którego za pomocą encodeURIComponent doczepiamy query string z naszego inputu tekstowego (chodzi o to, aby można było wyszukiwać frazy dłuższe niż 1 wyraz nie psując URLa).
Na samym końcu window.location.replace odsyła nas na stronę wyszukiwania, z odpowiednio przygotowanym query.