@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
.