gpt4 book ai didi

javascript - 如何找到列表中的最后一个li并隐藏元素

转载 作者:行者123 更新时间:2023-12-02 22:38:09 25 4
gpt4 key购买 nike

我在尝试取消隐藏列表中最后一项的元素时遇到困难。基本上我有一个通过查找类 <li class="single-data-item has-multi-items"> 来隐藏和取消隐藏按钮的列表。 。

我的问题是当它寻找最后一个 li 时在<li class="single-data-item has-multi-items">

<li class="single-data-item has-multi-items">
<ul class="pagnation-2">
<li>3a</li>
<li>3b</li>
<li>3c</li>
</ul>
</li>

JS代码:

if($item.is(':last-child')) {
$('#multi-next-multi-item').css('display', 'none');
$('#multi-single-next').css('display', 'block');
}

问题是试图找到最后一个 li 和隐藏/取消隐藏按钮。它将另一个项目添加到列表中,然后隐藏/取消隐藏按钮。您可以在下面看到它,在 3C 之后添加另一个项目符号,然后恢复正常。

$('#multi-single-next').click(function() {
let $item;

if(!$('ul.pagnation li.single-data-item.active').length) {
$item = $('ul.pagnation li.single-data-item').first();
}
else {
$prev = $('ul.pagnation li.single-data-item.active');
$item = $prev.next();

if(!$prev.next().length) {
$prev.removeClass('active');
$prev.hide();
return;
}

$prev.removeClass('active');
$prev.hide();
}

$item.addClass('active');
$item.show();

// sub items
$('ul.pagnation-2 li').removeClass('active');
if($item.hasClass('has-multi-items')) {
const $sub = $item.find('ul li').first();
$sub.addClass('active');
$sub.show();
$('#multi-next-multi-item').css('display','block');
$('#multi-single-next').css('display','none');
}
});


$('#multi-next-multi-item').click(function() {
const $item = $('ul.pagnation-2 li.active');
const $next = $item.next();

$item.removeClass('active');
$item.hide();

$next.addClass('active');
$next.show();
if($item.is(':last-child')) {
$('#multi-next-multi-item').css('display', 'none');
$('#multi-single-next').css('display', 'block');
}

});
.single-data-item { display: none; }
ul.pagnation-2 li { display: none; }
#multi-next-multi-item { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="multi-single-next" class="button">Single next</button>
<button id="multi-next-multi-item" class="button">Multi item</button>
<ul class="pagnation">
<li class="single-data-item"><div class="data-item">1</div></li>
<li class="single-data-item"><div class="data-item">2</div></li>
<li class="single-data-item has-multi-items">
<ul class="pagnation-2">
<li>3a</li>
<li>3b</li>
<li>3c</li>
</ul>
</li>
<li class="single-data-item"><div class="data-item">4</div></li>
<li class="single-data-item"><div class="data-item">5</div></li>
</ul>

最佳答案

这里有一些更简单的逻辑,它基于所有 <li> 的集合。那不是那些有类 multi-items 的人.

下一个项目由该集合中事件项目的索引确定。

单个单击处理程序可用于两个按钮

const $li = $('.pagnation li').not('.has-multi-items'),
$multi = $('.has-multi-items');


const $buttons = $('#multi-single-next, #multi-next-multi-item').click(function() {
let $item;
//easiest to always hide multi then use `add()` below to show the parent as needed
$multi.hide();

if (!$li.filter('.active').length) {
$item = $li.first();
} else {
const $prev = $li.filter('.active').removeClass('active').hide(),
nextIdx = $li.index($prev) + 1;
$item = nextIdx < $li.length ? $li.eq(nextIdx) : $li.first();
}

const $multiParent = $item.closest('.has-multi-items')
// toggle the buttons based on parent being multi or not
const isMulti = $multiParent.length > 0;
$buttons.first().toggle(!isMulti)
$buttons.last().toggle(isMulti)
// use add() to include the parent multi (if it exists) to show both
$item.addClass('active').add($multiParent).show();
});
.single-data-item {
display: none;
}

ul.pagnation-2 li {
display: none;
}

#multi-next-multi-item {
display: none
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="multi-single-next" class="button">Single next</button>
<button id="multi-next-multi-item" class="button">Multi item</button>
<ul class="pagnation">
<li class="single-data-item">
<div class="data-item">1</div>
</li>
<li class="single-data-item">
<div class="data-item">2</div>
</li>
<li class="single-data-item has-multi-items">
<ul class="pagnation-2">
<li>3a</li>
<li>3b</li>
<li>3c</li>
</ul>
</li>
<li class="single-data-item">
<div class="data-item">4</div>
</li>
<li class="single-data-item">
<div class="data-item">5</div>
</li>
</ul>

关于javascript - 如何找到列表中的最后一个li并隐藏元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58677634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com