jQuery next sibling li not working on last item

xdnvmnnf  于 2023-05-17  发布在  jQuery
关注(0)|答案(1)|浏览(122)

这是目前的工作,在大多数情况下:

$(".nextproject").click(function() {
    $(window).scrollTo(
        $(this)
        .parents()
        .nextAll()
        .find("li:visible:first"),
        1000,
        {easing:'easeOutExpo', axis:'x', offset:-75 }
    );
});

你可以在这里看到demo:http://www.studioimbrue.com/index2.php
整个过程都很顺利。当您单击底部的过滤器时,它仍然起作用并跳过隐藏的div。一旦你到达最后,就在#about div之前,它不会继续下去,我不知道为什么它不会。
编辑:我将div元素改为li元素。仍然不能正常工作;它会到达列表的最后一个,不会再前进。这完全说不通

i1icjdpr

i1icjdpr1#

您需要稍微调整一下,使用.nextAll()调用中的选择器,如下所示:

$(".nextproject").click(function() {
    $(window).scrollTo(
        $(this)
        .parents()
        .nextAll("li:visible:first"),
        1000,
        {easing:'easeOutExpo', axis:'x', offset:-75 }
    );
});

你的HTML是这样的:

<li class="container photography_cat" style="">
  <!-- Other stuff.... -->
  <div class="nextproject"></div>
</li>

你想找到下一个<li>,它是.nextproject的父元素的兄弟元素(而不是下一个<li>元素的 * 子元素 *)......它碰巧在除了最后一个部分之外的所有部分都有效,因为他们有<ul>,里面有<li>元素(右边的图像)。最后一个“about”部分没有任何<li>子项,之前右边的第一个小图像是它滚动到的内容,而不是实际的部分......所以它在最后没有工作:)
现在我想起来了,有没有可能你把.find().filter()弄混了?.filter()也可以......但是由于.nextAll()需要一个选择器,所以在这种情况下没有必要。

相关问题