На самом деле есть только один способ - использовать DOM API element.closest()
, но для этого требуется предоставить селектор, который может однозначно идентифицировать конкретный элемент, который вам нужен (или первыйэлемент, соответствующий этому селектору с точки зрения потомка).Без этого потребовалось бы многократное использование метода .parent()
, и вам нужно было бы знать, на сколько уровней вы хотите пройти.
// Starting from the inner most level
var start = document.getElementById("source");
// Let's say you wanted to reference the first ancestor
// that has the "something3" class
start.closest(".something3").classList.add("red");
// Or, the second closest
var firstMatch = start.closest(".something2");
firstMatch.classList.add("yellow");
// Or, even higher
firstMatch.closest(".something1").classList.add("aqua");
// And, of course, you can skip levels
start.closest(".something1").classList.add("dropCap");
#source {background-color:orange; }
.red { background-color:red; }
.yellow { background-color:yellow; font-size:1rem; }
.aqua { background-color:aqua; }
.dropCap { font-size:3em; }
<div class="something1">Level 1
<div class="something2">Level 2
<div class="something3">Level 3
<div id="source">Level 4</div>
</div>
</div>
</div>