I am displaying a series of elements using the next() function. Once I reach the end though, I want to go to the first element. Any ideas?
Here's the code:
//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); }); Basically I need an "if" statement that says "if there are no remaining 'next' elements, then find the first one.
Thanks!
Determine the .next() ahead of time by checking its length property.
$('.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); }); By the way, you could replace .parent().parent().parent() with .closest('.newsSingle') (if your markup allows it).
EDIT: I corrected the thisHeight to use the $next element that we referenced.
As a useful reference, the following is a function you can write and include:
$.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(); }; Instead of:
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();; } It would be:
$next = $ancestor.nextOrFirst('.newsSingle'); Reference: http://www.mattvanandel.com/999/jquery-nextorfirst-function-guarantees-a-selection/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With