0

jQueryコードの途中でif/elseステートメントを書くのは正しくないと感じます:

if ($("#test").length) {
  // do smth
}
else {
  // do smth else
}

次のようなものはありますか?

$("#test").test(function(){
  // do smth
}, 
function(){
  // do smth else
});
4

4 に答える 4

9

次のようなものはありますか:

あります、今!

(function($) {
    $.fn.test = function(a, b) {
        (this.length ? a : b).apply(this);
        return this;
    };
})(jQuery);

http://jsfiddle.net/alnitak/n2CLZ/の動作デモ

于 2012-04-25T14:47:56.650 に答える
2

私が知る限り...しかし、短い条件には三項演算子を使用できます

例:

var foo = $("#test").length ? "bar" : "baz";

編集:関数を使用する場合

$("#test").length ? (function() { console.log("#test available"); })() : (function() { console.log("#test not available"); })();
于 2012-04-25T14:46:10.750 に答える
0

要素が選択されていない場合、呼び出されたメソッドは何もしないため、使用した例はまったく必要ありません。

フィルター メソッドや each メソッドなどの内部以外の jQuery チェーンの途中に if ステートメントを配置することが理にかなっている状況は考えられません。

アップデート

私はこれを使いやすさの観点から見ています。次の 2 つの状況を比較してください。

if ( $(".div").length ) {
    console.log("We found divs");
} else {
    console.log("We did not find div");
}

$(".div").test(function(){
    console.log("We found divs");
},function(){
    console.log("We did not find divs");
});​

jQuery メソッドの方が読みやすいかもしれませんが、私にとってはほぼ同じです。私にとってそれを殺す部分は、ブール値パラメーターとプラグイン内のロジックを追加しない限り、jQuery メソッドは長さしかチェックできないという事実ですが、if ステートメントでは条件を変更するだけです。

プラグインが条件を受け入れた場合、各要素の条件を実行してチェックすることになりますが、渡す条件は、または指定された要素this.eachを返す関数である必要があります。既存の方法のようなものです。truefalse.filter

アップデート

完全を期すために、条件関数を受け入れるプラグインと using を比較するフィドルを次に示します$.fn.eachhttp://jsfiddle.net/fdYSx/2/

これ以上読みやすく、使いやすいとは思いません。

于 2012-04-25T14:48:34.093 に答える
0

注意事項:

if/else ステートメントは次のとおりです。

if(condition)
{
  //something
} else {
  //something
}

一方、スイッチは次のとおりです。

switch(someVal) {
  case 'valEqualsThis':
    //do something
    break;
}

if else の短いバージョンは、1 行の構文です。

if(someCondition)
  //dosomething
else
  //dosomethingelse

それのさらに短いバージョンは三項演算子です

someoutput = (someCondition) ? doTrue : doFalse

Jquery は、条件をチェックするこれらの既に短い方法をさらに簡素化しようとするビジネスに (まだ) 取り込まれていませんが、jquery は他の JavaScript と同様に拡張可能であるため、jquery ネイティブ関数が必要な場合は、$名前空間に 1 つ書き込むだけです。

于 2012-04-25T14:51:16.757 に答える