1

次のような素敵な jQuery チェーンがあります。

$(...)
    .method1()
    .method2()
    .method3()
    ...;

これで、またはのいずれか.method2()を実行する条件に置き換えたいことがわかりました。実際、私はこれをしたい:.method2a().method2b(p1)

$(...)
    .method1();

if (cond)
    $(...).method2a()
else
    $(...).method2b(p1)

$(...)
    .method3()
    ...;

しかし、これは醜いです - それは美しい連鎖を壊します!

そこで、チェーン内で独自の関数を実行できる jQuery API メソッド XYZ を探しています! したがって、次のようになります。

$(...)
    .method1()
    .XYZ(function () {
        if (cond)
            this.method2a()
        else
            this.method2b(p1);
    })
    .method3()
    ...;

それで、これを可能にするjQueryメソッドXYZはありますか? これに最も近いのは ですが.each、要素ごとに個別に実行するのは好きではありません!

4

2 に答える 2

5

私があなたに言うことは本当に嫌いで、醜いと思いますが、これを使うことができます:

$(...)
.method1()
[cond ? 'method2a' : 'method2b']()
.method3();

2番目の解決策:

このコードをファイルに追加します

(function($){
    if(!$.fn.if)
        $.fn.if = function(cond, trueFn, falseFn){
            if(cond)
                trueFn.call(this);
            else
                falseFn.call(this);

            return this
        }
})(jQuery)

編集:フォーマット

.if()これにより、次のように使用できる関数にアクセスできます。

$('body').if(cond, 
         function(){
             this.addClass('a')
         },
         function(){
             this.addClass('b')
         })
于 2013-10-29T17:07:10.537 に答える
1

私はこれのための組み込みを認識していませんが、これは非常に単純なプラグインです:

(function() {

    $.fn.XYZ = function(fn) {
        fn.call(this);
        return this;
    }; 

} ());
于 2013-10-29T17:05:22.643 に答える