A solução @rvighne funciona bem, mas conforme identificado nos comentários ParentElement
e ClassList
ambos 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;
}
parentNode
propriedade em vez da parentElement
propriedade
indexOf
método na className
propriedade em vez do contains
método na classList
propriedade
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.
p
elemento. Se você realmente deseja apenas obter o nó pai, pode fazê-loele.parentNode
.