Get By Classname Hierarchy

<div id="root">
  <div class="a" id="a-1">
    <div class="b" id="b-1">
      <div class="c" id="c-1"></div>
      <div class="c" id="c-2">
        <div class="a" id="a-2">
          <div class="c" id="c-3"></div>
        </div>
      </div>
    </div>
    <div class="c" id="c-4"></div>
  </div>
</div>
const root = document.getElementById("root");

function getByClassnameHierarchy(root, classNames) {
  const results = [];
  const classes = classNames.split(">");
  traverseDOM(root, classes, 0, results);
  return results;
}

function traverseDOM(element, classNames, index, results) {
  if (!element) {
    return;
  }
  const targetClass = classNames[index];
  if (
    index === classNames.length - 1 &&
    element.classList.contains(targetClass)
  ) {
    results.push(element);
    return;
  }

  for (let child of element.children) {
    if (element.classList.contains(targetClass)) {
      traverseDOM(child, classNames, index + 1, results);
    } else {
      traverseDOM(child, classNames, 0, results);
    }
  }
}

console.log(getByClassnameHierarchy(root, "a>b"));
console.log(getByClassnameHierarchy(root, "a>c"));
console.log(getByClassnameHierarchy(root, "a>b>c"));

// [div#b-1.b]
// [div#c-3.c, div#c-4.c]
// [div#c-1.c, div#c-2.c]