К сожалению, у нас нет прямого пути, чтобы найти следующий элемент нон родственного, но мы можем справиться с этой ситуацией во многих отношениях с помощью функции JQuery. Я просто пробовал на пути к достижению вашей цели, зайдите в this working fiddle и дайте мне знать, если вам нужна какая-либо ясность, добавлены некоторые встроенные комментарии и для вашего понимания.
HTML:
<div class="page active">div 1</div>
<div class="page">div 2</div>
<div class="set">
<div class="page">set 1 - div 1</div>
<div class="page">set 1 - div 2</div>
<div class="page">set 1 - div 3</div>
</div>
<div class="page">div 5</div>
<div class="set">
<div class="page">set 2 - div 1</div>
<div class="page">set 2 - div 2</div>
</div>
<div class="page">div 6</div>
<button class="next-btn">Next</button>
CSS:
.active {
color: red;
}
.next-btn {
cursor: pointer;
}
Javascript:
$(function() {
$('button').click(function() {
var elem = $(".page.active").toggleClass('active'); // current active element
var nextElem = elem.next(); // next element
// go above one level and get next element
// if no next element exists, means end of the child level
if (!nextElem.length) {
nextElem = elem.parent().next();
}
// if next element has some PAGE children then update the first child element
if (nextElem.children('.page').length > 0) {
nextElem.children('.page:first-child').toggleClass('active');
} else if (nextElem.hasClass('page')) {
nextElem.toggleClass('active');
}
});
});
Этот подход ручка s сценарий с одним уровнем ребенка, вы можете расширить его на несколько уровней и с помощью рекурсивных функций, я думаю, это поможет вам соответствующим образом обработать ваш сценарий.
Почему вы не делаете '$ ('. Page'). ToggleClass ('active')' он переключит все на обратный путь. –
Почему бы не использовать '.parent()' или '.closest()' then do 'find ('. Active')' – guradio
Вы используете 'toggleClass()' 'и' 'toggle()' 'я думаю, что там это лучший способ, когда вы можете опустить один из двух. – Ismail