Если вы используете современный браузер, вы можете использовать closest
, чтобы увидеть, есть ли какие-либо элементы-предки, которые имеют один из других классов.Если нет, то вы нашли самый верхний элемент с классом.Это предполагает, что в DOM есть только один элемент каждого класса.
По сути, использование reduce
позволяет мне проходить через массив и агрегировать с помощью функции.Функция получает текущий класс и находит элемент с этим классом.Затем он получает массив классов (кроме того, который мы тестируем) и определяет, имеет ли текущий элемент один из них в качестве родительского.Если нет, у нас есть самый верхний элемент.
const parent = ["class-1","class-2","class-3"].reduce((agg, cur, idx, arr) => {
const sut = document.querySelector(`.${cur}`);
const hasParent = arr.filter(e => e !== cur).some(clas => sut.closest(`.${clas}`) !== null);
return hasParent ? agg : sut;
}, null);
console.log(parent.className);
<div>
<div> Hey nice talking to you </div>
<div> Hey how are you</div>
<div><br/></div>
<div class="class-1">
<div>Hey, are you there?</div>
<div class="class-2">
<div>How was the day</div>
<div class="class-3"><br/></div>
</div>
</div>
</div>