@rvighne решение работает хорошо, но , как указано в комментариях , ParentElementи ClassListоба имеют проблемы совместимости. Чтобы сделать его более совместимым, я использовал:
function findAncestor (el, cls) {
while ((el = el.parentNode) && el.className.indexOf(cls) < 0);
return el;
}
parentNodeсобственность вместо parentElementсобственности
indexOfметод в classNameсвойстве вместо containsметода в classListсвойстве.
Конечно, indexOf просто ищет наличие этой строки, ему все равно, вся эта строка или нет. Поэтому, если у вас есть другой элемент с классом 'ancestor-type', он все равно вернется, если нашел 'ancestor', если это проблема для вас, возможно, вы можете использовать regexp, чтобы найти точное совпадение.
pэлементу. Если вы действительно хотите получить родительский узел, вы можете это сделатьele.parentNode.