La solución @rvighne funciona bien, pero como se identifica en los comentarios ParentElement
y ClassList
ambos 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;
}
parentNode
propiedad en lugar de la parentElement
propiedad
indexOf
método en la className
propiedad en lugar del contains
método en la classList
propiedad.
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.
p
elemento. Si en realidad solo desea obtener el nodo primario, puede hacerloele.parentNode
.