jQuery异步条件语句

时间:2011-06-28 07:34:06

标签: javascript jquery asynchronous

在jQuery中,你能做到这样的事情:

function f(b) { 
    return $("<input></input>")
        .addClass("test")
        .if(b, function() {
            $(this).attr("disabled", true).addClass("example");
        })
        .val("test");
}

而不是:

function f(b) {
    var input = $("<input></input>").addClass("test");

    if (b) {
        input.attr("disabled", true).addClass("example");
    }

    return input.val("test");
}

实际上,这只是一种语法糖。但是很有用。特别是在创作大型Ajax应用程序时。

此功能是否计划用于下一个版本?

3 个答案:

答案 0 :(得分:1)

请参阅Ben Alman的这个chainable iif插件。

实施例

$('div')
  .append( '1' )
  .iff( my_test, 'foo' )
    .append( '2' )
    .end()
  .append( '3' );

另一种方式是作为上述帖子的评论员解释here

实施例

$(this)[$(this).hasClass("myClass")?"hide":"show"]();

答案 1 :(得分:1)

不,没有“条件”方法或其他东西。我不认为像这样的方法会把它变成核心,它就像是矫枉过正的不是吗?例如:

function f( b ) {
    return $( '<input>', {
        'class':    'test',
        disabled:   !!b,   // alternate: b === 'something' ? true : false
        value:      'test'
    });
}

这只会将b变量转换为布尔值并将其传递给disable attribute。我想你可以在像.if()这样的方法有用的所有场合创建类似的构造。

演示http://jsfiddle.net/L8ZaP/

答案 2 :(得分:1)

我认为这看起来并不糟糕:

function f(b) { 
    return $("<input></input>")
        .addClass("test")            
        .attr("disabled", b ? true : false)
        .addClass(b ? "example" : "")
        .val("test");
}