Il existe une fonction standardisée pour ce faire: Element.closest . La plupart des navigateurs, à l'exception d'IE11, le prennent en charge ( détails par caniuse.com ). Les documents MDN incluent également un polyfill au cas où vous auriez à cibler des navigateurs plus anciens.
Pour trouver le tbodyparent le plus proche, thvous pouvez faire:
th.closest('tbody');
Au cas où vous voudriez écrire la fonction vous-même - voici ce que j'ai proposé:
function findClosestParent (startElement, fn) {
var parent = startElement.parentElement;
if (!parent) return undefined;
return fn(parent) ? parent : findClosestParent(parent, fn);
}
Pour trouver le parent le plus proche par nom de balise, vous pouvez l'utiliser comme ceci:
findClosestParent(x, element => return element.tagName === "SECTION");