<ul class="principaly">
<li class='active'>Text</li>
<li>Text2</li>
<li>Text3</li>
<li>Text4</li>
</ul>
<ul class="dropdown_1">
<li>Text1ForDropdown_1</li>
<li class='active'>Text2ForDropdown_1</li>
<li>Text3ForDropdown_1</li>
<li>Text4ForDropdown_1</li>
</ul>
<ul class="dropdown_2">
<li>Text1ForDropdown2</li>
<li>Text2ForDropdown2</li>
<li class='active'>Text3ForDropdown2</li>
<li>Text4ForDropdown2</li>
</ul>
<ul class="dropdown_3">
<li>Text1ForDropdown3</li>
<li class='active'>Text2ForDropdown3</li>
<li>Text3ForDropdown3</li>
<li>Text4ForDropdown3</li>
</ul>
<ul class="active" data-level="1">
<li data-show="a">третий уровень есть только здесь</li>
<li data-show="b">b жми любой</li>
<li data-show="c">c жми любой</li>
</ul>
<ul id="a" data-level="2">
<li data-show="aa">aa</li>
<li data-show="ab">третий уровень здесь</li>
<li data-show="ac">и здесь</li>
</ul>
...
Array.prototype.forEach.call(
document.querySelectorAll('li'),
li => li.addEventListener('click', function(){
var target = document.getElementById(this.dataset.show)
for (var lvl = +target.dataset.level; lvl < 5; lvl++) {
var active = document.querySelectorAll(`[data-level="${lvl}"].active`)
Array.prototype.forEach.call(active, el=>el.classList.remove('active'))
}
target.classList.toggle('active')
})
)
function qsa( s, n ) {
return [].slice.call( (n || document).querySelectorAll( s ), 0 );
}
function eachqsa( c, s, n ) {
qsa( s, n ).forEach( c );
}
function show( el ) {
if( !el ) return;
el.style.display = 'block';
}
function activate( li ) {
li.classList.add( 'active' );
}
function deactivate( li ) {
li.classList.remove( 'active' );
}
function proc( li, next ) {
eachqsa( deactivate, '.active', li.parentNode );
activate( li );
show( next );
}
function procbind( lis, nexts ) { // привязывающая функция
var next = qsa( nexts ).pop();
function onclick() {
proc( this, next );
}
function bind( li ) {
li.onclick = onclick;
}
eachqsa( bind, lis );
}
// привязка по группам
procbind( '.principaly li', '.dropdown_1' );
procbind( '.dropdown_1 li', '.dropdown_2' );
procbind( '.dropdown_2 li', '.dropdown_3' );
procbind( '.dropdown_3 li', '.dropdown_4' );