Добавление логики if в цепочку jQuery
Допустим, у меня есть следующий jQuery:
// pseudocode :
$(this)
.doSomething
.doSomething
.selectSomething
.doSomething
.animate({
opacity: 1
}, 150)
.end()
.selectSomethingElse
.doSomething
Я хочу, чтобы вышеуказанное было выполнено. Однако, если браузер IE, я не хочу, чтобы анимационная часть выполнялась (поскольку IE не может анимировать объекты с прозрачными PNG и сохранять прозрачность PNG).
Есть ли какой-либо способ поддерживать красивый цепочечный синтаксис jquery, но каким-то образом пропустить анимационную часть, основанную на некоторой логике if (в данном случае тестирование на IE)?
3 ответа
Вы можете сделать each()
и передать ему функцию, которая обрабатывает анимацию, которая должна работать.
$(this)
.doSomething
.doSomething
.selectSomething
.doSomething
.each(function() {
// Will return false on IE, true on others
if(jQuery.support.opacity) {
$(this).animate({
opacity: 1
}, 150);
}
})
.end()
.selectSomethingElse
.doSomething
Ты можешь использовать filter
отфильтровать IE:
$(this).filter(function() {
return $.support.opacity;
}).animate({
opacity: 1
}, 150);
Перед этим у меня был бы блок кода, который проверял бы IE и, если он был найден, удалял бы тот селектор, который использует первый ".selectSomething". Или слегка измените.selectSomething, чтобы он проверял дополнительный класс, который присутствует только в браузерах, отличных от IE.
Это поможет разделить логику обнаружения вашего браузера.