3

次のjQueryがあるとしましょう。

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

上記を実行してほしい。ただし、ブラウザーがIEの場合、アニメーション部分を実行したくありません(IEが透明なPNGを使用してオブジェクトをアニメーション化し、PNGの透明性を保持できないため)。

とにかくチェーンされたjquery構文を維持することはできますが、何らかのifロジック(この場合はIEのテスト)に基づいてアニメーション部分をスキップしますか?

4

3 に答える 3

6

アニメーションを処理する関数を実行して渡すことができます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
于 2010-01-15T21:45:40.903 に答える
1

filterIE を除外するために使用できます。

$(this).filter(function() {
    return $.support.opacity;
}).animate({ 
    opacity: 1
}, 150);
于 2010-01-15T22:45:13.310 に答える
0

この前に、IE をチェックするコード ブロックがあり、見つかった場合は、最初の「.selectSomething」が使用しているセレクターを削除します。または、.selectSomething を少し変更して、IE 以外のブラウザーにのみ存在する追加のクラスをチェックするようにします。

ブラウザー検出ロジックを分離しておくのに役立ちます。

于 2010-01-15T21:45:57.300 に答える