3

私はこれに似た多くのコードを書いていることに気づきました:

$('.selector').addClass(condition ? 'class' : '');

これはばかげて気まぐれかもしれませんが、Javascript の false 条件なしでそれを行う方法があるかどうかに興味がありました。私は周りを見回しましたが、それを行うことができるオペレーターを実際には見つけていませんが、間違っている可能性があります (間違っていることを願っています)。

私は必ずしも自分のコードを最適化しようとしているわけではありません。これは単なる好奇心です:)

ありがとう。

4

3 に答える 3

8

JavaScriptの&&演算子が短絡します。多くのスクリプトやライブラリで一般的に使用されているこのようなものが表示されます。

condition && $('.selector').addClass('class');

または、mgibsonbrのコメントが述べているよう&&に、メソッド自体の中で簡単に行うことができます。

$('.selector').addClass(condition && 'class');

ただし、他の言語とは異なり、両方の値が真である場合にJavaScriptが生成a && bされることは一般的に知られていない事実であるため、直感的ではありません。btrue

于 2012-05-27T03:03:56.140 に答える
2
!condition || func();  // launch func only if condition holds

conditionがfalseの場合、 !conditiontrueです。の最初のオペランド||がtrueであるため、式全体がtrueになります。はfunc()短絡し、呼び出されません。

conditiontrueの場合、は!conditionfalseであるためfunc()、論理和を評価するために呼び出す必要があります。

于 2012-05-27T03:05:35.140 に答える
1

独自の jQuery モナディック操作を作成できます。これは ($.* 名前空間の混乱を減らすために) 非常に慎重に使用する必要がありますが、それでも、これを頻繁に行う場合は、これが最もエレガントな方法です。

(function($) {
    $.fn.addClassIf = function() {  
        var args = Array.prototype.slice.call(arguments, 0, -1);
        var condition = Array.prototype.slice.call(arguments, -1)[0];

        return condition ? this.addClass.apply(this,args) : this;
    };
})(jQuery);

デモ:

> $('body')
[<body class=​"question-page">​…​&lt;/body>​]

> $('body').addClassIf('test1', true)
[<body class=​"question-page test1">​…​&lt;/body>​]

> $('body').addClassIf('test2', false)
[<body class=​"question-page test1">​…​&lt;/body>​]

> $('body').addClassIf('test3', true)
[<body class=​"question-page test1 test3">​…​&lt;/body>​]
于 2012-05-27T03:21:27.690 に答える