【发布时间】:2021-05-27 15:10:23
【问题描述】:
我有一个这样的列表。
在每个 .list 项中都有一个 html 按钮:
<div class="list">
<button>.list</button>
</div>
此外,每个项目都可以在 .bloc 元素内
<div class="list"><button>.list</button></div>
<div class=bloc>
<div class="list"><button>.list</button></div>
</div>
当我点击按钮时,我希望前一个 .list 项具有 .active 类,如下所示:
嗯,用 jquery 很容易,我已经做到了,效果很好:
$('.list button').on('click', function() {
$(this).closest('.list').prev('.list').addClass('active');
});
但是我有一些具体情况: 有时列表项可以隐藏,而具有隐藏类的列表不能有 .active 类:
或者更复杂。您必须逐个上去,并将活动类放在没有隐藏类的第一个:
我为没有隐藏类的物品做了机制,但我担心我走错了方向,因为案例的数量越来越多。没有更聪明的方法吗? :o
$('.list button').on('click', function() {
if ($(this).closest('.list').prev().length === 0) {
if ($(this).closest('.bloc').length) {
$(this).closest('.bloc').prev('.list').addClass('active');
$(this).closest('.bloc').prev('.bloc').find('.list:last-child').addClass('active');
} else {
$(this).closest('.list').next('.list').addClass('active');
}
}
if ($(this).closest('.list').prev('.bloc').length) {
$(this).closest('.list').prev('.bloc').find('.list:last-child').addClass('active');
}
$(this).closest('.list').prev('.list').addClass('active');
}
【问题讨论】:
标签: javascript jquery algorithm