добавление логики if в цепочку jQuery - PullRequest
3 голосов
/ 16 января 2010

Допустим, у меня есть следующий jQuery:

// pseudocode  :
$(this)
    .doSomething
    .doSomething
    .selectSomething
        .doSomething
        .animate({ 
            opacity: 1
        }, 150)
        .end()
    .selectSomethingElse
        .doSomething

Я хочу выполнить вышеизложенное. Однако, если браузер IE, я не хочу, чтобы анимационная часть выполнялась (поскольку IE не может анимировать объекты с прозрачными PNG и сохранять прозрачность PNG).

Есть ли какой-либо способ поддерживать красивый цепочечный синтаксис jquery, но каким-то образом пропустить анимационную часть, основываясь на некоторой логике if (в данном случае тестировании на IE)?

Ответы [ 3 ]

6 голосов
/ 16 января 2010

Вы можете сделать 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
1 голос
/ 16 января 2010

Вы можете использовать filter для фильтрации IE:

$(this).filter(function() {
    return $.support.opacity;
}).animate({ 
    opacity: 1
}, 150);
0 голосов
/ 16 января 2010

Перед этим у меня будет блок кода, который проверяет IE и, если он найден, удаляет любой селектор, который использует первый «.selectSomething».Или слегка измените .selectSomething, чтобы он проверял дополнительный класс, присутствующий только в браузерах, отличных от IE.

Это помогло бы разделить логику обнаружения браузера.

...