Esiste una funzione standardizzata per farlo: Element.closest . La maggior parte dei browser tranne IE11 lo supportano ( dettagli di caniuse.com ). I documenti MDN includono anche un polyfill nel caso in cui sia necessario scegliere come target browser meno recenti.
Per trovare il tbodygenitore più vicino a cui è stato dato un thpotresti fare:
th.closest('tbody');
Nel caso in cui desideri scrivere la funzione da solo, ecco cosa ho pensato:
function findClosestParent (startElement, fn) {
var parent = startElement.parentElement;
if (!parent) return undefined;
return fn(parent) ? parent : findClosestParent(parent, fn);
}
Per trovare il genitore più vicino in base al nome del tag puoi usarlo in questo modo:
findClosestParent(x, element => return element.tagName === "SECTION");