Uczymy się rekurencyjnie przechodzić po drzewie DOM. Lekcja wymaga znajomości pewnych podstaw. Do dzieła.
Na początek – konstrukcja funkcji:
function traverseDOM() {
function traverse(node) {
if(node == null)
return;
for(var child of node.children)
traverse(child);
}
traverse(document.documentElement);
}
Mamy funkcję główną i tzw. funkcję „_”, czyli z podkreśleniem (pomocniczą, enkapsulacja rekurencji). Dzięki JavaScript closures (domknięcia) nie musimy tak się bawić tylko możemy funkcję „_” zdefiniować wewnątrz głównej.
Dalej:
function traverseDOM() {
function traverse(node) {
if(node == null)
return;
console.log(node);
for(var child of node.children)
traverse(child);
}
traverse(document.documentElement);
}
Funkcja wyżej wyświetli nam wszystkie nodes. Problem w tym, że nie widzimy ich głębokości. To też można rozwiązać:
function traverseDOM() {
function traverse(node, depth=1) {
if(node == null)
return;
console.log(node);
console.log("-".repeat(depth));
let newDepth = depth + 1;
for(var child of node.children)
traverse(child,newDepth);
}
traverse(document.documentElement, 1);
}
Tak to będzie wyglądać:
window.addEventListener('DOMContentLoaded', function(){
traverseDOM();
});
//<html lang="en">
//-
//<head>
//--
//<meta charset="UTF-8">
//---
//<meta name="viewport" content="width=device-width, initial-scale=1.0">
//---
//<title>
//---
//<body>
//--
DOM Traversal to coś, co wykonuje querySelector czy inne funkcje tego typu ilekroć chcemy złapać jakiś element/elementy.