1

我有一个很好的 jQuery 链,如下所示:

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

现在我看到我想.method2()用一个条件替换来运行.method2a()or 或.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();

第二种解决方案:

将此代码添加到您的文件中

(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 回答