jquery 如何找出next()何时到达末尾,然后转到第一项

pgky5nke  于 2023-06-22  发布在  jQuery
关注(0)|答案(4)|浏览(168)

我正在使用next()函数显示一系列元素。当我到达终点时,我想去第一个元素。有什么想法吗
代码如下:

//Prev / Next Click
$('.nextSingle').click( function() {
    //Get the height of the next element
    var thisHeight = $(this).parent().parent().parent().next('.newsSingle').attr('rel');
    //Hide the current element
    $(this).parent().parent().parent()
        .animate({
            paddingBottom:'0px',
            top:'48px',
            height: '491px'
        }, 300) 
        //Get the next element and slide it in      
        .next('.newsSingle')
        .animate({
            top:'539px',
            height: thisHeight,
            paddingBottom:'100px'
        }, 300);
});

基本上,我需要一个“if”语句,它说“如果没有剩余的‘next’元素,那么找到第一个”。
谢谢!

jbose2ul

jbose2ul1#

通过检查length属性提前确定.next()

$('.nextSingle').click( function() {
       // Cache the ancestor
    var $ancestor = $(this).parent().parent().parent();
       // Get the next .newsSingle
    var $next = $ancestor.next('.newsSingle');
       // If there wasn't a next one, go back to the first.
    if( $next.length == 0 ) {
        $next = $ancestor.prevAll('.newsSingle').last();;
    }

    //Get the height of the next element
    var thisHeight = $next.attr('rel');

    //Hide the current element
    $ancestor.animate({
            paddingBottom:'0px',
            top:'48px',
            height: '491px'
        }, 300);

        //Get the next element and slide it in      
    $next.animate({
            top:'539px',
            height: thisHeight,
            paddingBottom:'100px'
        }, 300);
});

顺便说一下,你可以用.closest('.newsSingle')替换.parent().parent().parent()(如果你的标记允许的话)。

**编辑:**我更正了thisHeight,使用了我们引用的$next元素。

khbbv19g

khbbv19g2#

作为一个有用的参考,下面是一个可以编写和包含的函数:

$.fn.nextOrFirst = function(selector)
{
  var next = this.next(selector);
  return (next.length) ? next : this.prevAll(selector).last();
};

$.fn.prevOrLast = function(selector)
{
  var prev = this.prev(selector);
  return (prev.length) ? prev : this.nextAll(selector).last();
};

而不是:

var $next = $ancestor.next('.newsSingle');
   // If there wasn't a next one, go back to the first.
if( $next.length == 0 ) {
    $next = $ancestor.prevAll('.newsSingle').last();;
}

它将是:

$next = $ancestor.nextOrFirst('.newsSingle');

参考:http://www.mattvanandel.com/999/jquery-nextorfirst-function-guarantees-a-selection/

e0uiprwp

e0uiprwp3#

根据jQuery文档,空的jQuery对象将返回.length 0。
所以你需要做的是在调用.next时检查返回,然后调用:first
http://api.jquery.com/next/

uubf1zoe

uubf1zoe4#

您可以使用这些函数来查看当前项是否是第一个/最后一个子项。

jQuery.fn.isFirst = function() { return (this[0] === this.parent().children().first()[0]); };
jQuery.fn.isLast = function() { return (this[0] === this.parent().children().last()[0]); };

if($ancestor.isLast())
{
    // ...
}
else
{
    // ...
}

相关问题