jQuery: как узнать, когда next() достигнет конца, затем перейдите к первому элементу
Я показываю ряд элементов, используя функцию 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", который говорит: "если нет оставшихся "следующих" элементов, то найдите первый.
спасибо!
4 ответов
определить .next()
раньше времени, проверив его length
собственность.
$('.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);
});
кстати, вы могли бы заменить .parent().parent().parent()
С .closest('.newsSingle')
(если разметка позволяет).
EDIT: исправил thisHeight
использовать $next
элемент, на который мы ссылались.
в качестве полезной ссылки ниже приведена функция, которую вы можете написать и включить:
$.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/
согласно документации jquery, пустой объект jquery будет возвращен .длина 0.
Итак, что вам нужно сделать, это проверить возврат, когда вы звоните .далее, а потом звоните: сначала
вы можете использовать эти функции, чтобы увидеть, если текущий элемент является первым/последним ребенком.
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
{
// ...
}