Get Elements By Classname

<div class="a" id="root">
  <div class="b" id="b-1">
    <div class="a" id="a-2">
      <div class="d" id="d-1"></div>
    </div>
    <div class="c" id="c-1">
      <div class="a" id="a-3">
        <div class="d" id="d-2"></div>
      </div>
    </div>
  </div>
</div>
function getElementsByClassName(root, className) {
  const search = (node) => {
    let results = [];

    if (node.classList.contains(className)) {
      console.log(node.id, node.classList[0]);
      results.push(node);
    }

    for (let child of node.children) {
      let res = search(child);
      results = [...results, ...res];
    }

    return results;
  };

  return search(root);
}

const root = document.getElementById("root");
console.log(getElementsByClassName(root, "a"));

// root a
// a-2 a
// a-3 a
// [HTMLDivElement, HTMLDivElement, HTMLDivElement] ~ [div#root.a, div#a-2.a, div#a-3.a]