La solución @rvighne funciona bien, pero como se identifica en los comentarios ParentElementy ClassListambos tienen problemas de compatibilidad. Para hacerlo más compatible, he usado:
function findAncestor (el, cls) {
while ((el = el.parentNode) && el.className.indexOf(cls) < 0);
return el;
}
parentNodepropiedad en lugar de la parentElementpropiedad
indexOfmétodo en la classNamepropiedad en lugar del containsmétodo en la classListpropiedad.
Por supuesto, indexOf simplemente está buscando la presencia de esa cadena, no le importa si es la cadena completa o no. Entonces, si tuviera otro elemento con la clase 'ancestro-type', aún así devolvería haber encontrado 'ancestor', si esto es un problema para usted, tal vez pueda usar regexp para encontrar una coincidencia exacta.
pelemento. Si en realidad solo desea obtener el nodo primario, puede hacerloele.parentNode.