Existe uma função padronizada para fazer isso: Element.closest . A maioria dos navegadores, exceto o IE11, oferece suporte a ele ( detalhes em caniuse.com ). Os documentos MDN também incluem um polyfill no caso de você ter que direcionar os navegadores mais antigos.
Para encontrar o tbodypai / mãe mais próximo dado um, thvocê pode fazer:
th.closest('tbody');
Caso você queira escrever a função sozinho - aqui está o que eu criei:
function findClosestParent (startElement, fn) {
var parent = startElement.parentElement;
if (!parent) return undefined;
return fn(parent) ? parent : findClosestParent(parent, fn);
}
Para encontrar o pai mais próximo pelo nome da tag, você pode usá-lo assim:
findClosestParent(x, element => return element.tagName === "SECTION");