2013-04-10 5 views
0

Я работаю над каталогом для велосипедов, который включает в себя фильтрацию и лайтбокс для подробной информации.jQuery: .is: последний ребенок (или первый ребенок) с определенным классом

Обзор велосипеда состоит из большой ul с литой в ней, где каждый li представляет собой один велосипед. Подробная информация (которая используется для фильтрации) устанавливается и считывается с помощью атрибутов данных. Если li имеет класс .show, он соответствует критериям фильтра и, таким образом, показан в обзоре.

При навигации по лайтбокс (prev/next стрелки) пользователь должен видеть только велосипеды, соответствующие критериям (есть .show), что я и работаю.

Последний шаг (который я задаю для этого вопроса): в лайтбокс я хочу, чтобы «предыдущая» стрелка исчезла, когда первый велосипед активен, а «следующая» стрелка должна исчезнуть, когда последний велосипед активный.

Я попытался это:

if (info.is(":last-child")) { 
    lightbox.find(".lightbox-nav-next").hide(); 
} else { 
    lightbox.find(".lightbox-nav-next").show(); 
}; 

Где info является li, который показан в осветителя на данный момент.

Мне интересно, почему info.is(":last-child") не работает ... Я думаю, что это потому, что он выбирает последнего ребенка, не учитывая, имеет ли он класс .show.

Каков наилучший способ решить эту проблему? Спасибо заранее!

EDIT: Страница, о которой я говорю, находится по адресу: http://dev.onefinitystudios.com/rvs/verkoop.html. Файл, в котором находится javascript, - catalogus.js.

+3

Было бы хорошо, чтобы увидеть код, который вы работаете. Пример из jsFiddle.net также будет долгим. – j08691

+0

Мой плохой, я добавил URL-адрес онлайн-версии! –

ответ

3

Вы можете использовать селектор :last.

Что необходимо проверить, является ли info таким же, как последний элемент с классом show, его можно достичь с помощью $('.show:last').is(info).

if ($('.show:last').is(info)) { 
    lightbox.find(".lightbox-nav-next").hide(); 
} else { 
    lightbox.find(".lightbox-nav-next").show(); 
} 
+0

Спасибо! Это прекрасно работает! Я чувствую себя глупо, потому что не думаю об этом ... –

0

Вы также можете использовать JQuery .last()

JQuery .last() выбирает последний ребенок в любом случае

Так что ваш код будет что-то вроде:

if (info.last()) { 
    lightbox.find(".lightbox-nav-next").hide(); 
} else { 
    lightbox.find(".lightbox-nav-next").show(); 
}; 

http://api.jquery.com/last/

+0

Я знаю, но используя '.last()' Я не могу указать только поиск элементов с классом sepcific ('.show') либо ... Так что это одно и то же, верно? –

+0

Оба способа, которые я сказал, и способ, которым вы сказали в своем кодовом боте, искать последнего ребенка, ни один из них не проверяет, содержит ли последний li класс .show. Вам нужно будет запустить еще одну проверку в инструкции if, чтобы увидеть, содержит ли последний li класс show – Andrew

+0

Возможно, вам нужно будет показать больше вашего кода и работы. Поскольку я не уверен, как все работает – Andrew

0

Попробуйте вместо этого с :last (да, его не с CSS, но с добавлением jQuery)

т.е.

if (info.is(":last")) { 
    ... 

Docs

1
lightbox.find(".lightbox-nav-next").toggle(function() { 
    return ! info.is(".show:last"); 
}); 

и

lightbox.find(".lightbox-nav-prev").toggle(function() { 
    return ! info.is(".show:first"); 
}); 
+0

Спасибо за ответ, но Арун Р Йони уже решил это. –

+0

@Cas Я в основном оставил его, потому что использование '.toggle()' вместо конструкции if (x) then .show() else .hide() ". – Tomalak

+0

@ Томолак, я вижу твою точку! Спасибо за ответ в любом случае. –

Смежные вопросы