A solução @rvighne funciona bem, mas conforme identificado nos comentários ParentElemente ClassListambos têm problemas de compatibilidade. Para torná-lo mais compatível, eu usei:
function findAncestor (el, cls) {
while ((el = el.parentNode) && el.className.indexOf(cls) < 0);
return el;
}
parentNodepropriedade em vez da parentElementpropriedade
indexOfmétodo na classNamepropriedade em vez do containsmétodo na classListpropriedade
Obviamente, o indexOf está simplesmente procurando a presença dessa string, não importa se é a string inteira ou não. Portanto, se você tivesse outro elemento com a classe 'tipo de ancestral', ele ainda retornaria como tendo encontrado 'ancestral', se esse for um problema para você, talvez você possa usar o regexp para encontrar uma correspondência exata.
pelemento. Se você realmente deseja apenas obter o nó pai, pode fazê-loele.parentNode.