1

サイトのコードに、次の種類の条件ステートメントがたくさんあることに気付きました。

//Example 1
if ($("#myDiv1").hasClass("myClass1")) {
    $("#myDiv1").hide();
}

//Example 2
if (!$("#myDiv2").is(":hover")) {
    $("#myDiv2").slideUp("slow");
}

これを少し整理する明白な方法は次のとおりです。

//Example 1
var e1 = $("#myDiv1");
if (e1.hasClass("myClass1")) {
    e1.hide();
}

//Example 2
var e2 = $("#myDiv2");
if (!e2.is(":hover")) {
    e2.slideUp("slow");
}

ifしかし、ステートメントにもかかわらず、どうにかして関数を連鎖できるのではないかと思っていました。この 2 行のコードを試してみました (うまくいくとは思いませんでしたし、うまくいきませんでした)。

//Example 1
var e1 = $("#myDiv1");
if (e1.hasClass("myClass1").hide()); //Attempt1

e1.hasClass("myClass1").hide(); //Attempt2

ifDOM要素がステートメントとステートメントの引数の両方で同じ場合、条件をチェーンする方法はありますifか?

4

3 に答える 3

3

これを書き直してコードの使用量を減らす 1 つの方法は、次のとおりです。このスタイルは、JavaScript がブール ステートメントを評価する方法を利用しており、「ショートサーキット」と呼ばれることもあります。基本的に、各行の 2 番目の部分 (&& の後) は、最初の部分が true の場合にのみ実行されます。

$("#myDiv1").hasClass("myClass1") && $("#myDiv1").hide();
!$("#myDiv2").is(":hover") && $("#myDiv2").slideUp("slow");
于 2014-09-14T20:56:25.923 に答える
2

それは簡単です。セレクターを結合します。

$('#myDiv1.myClass1').hide();

$('#myDiv2:not(:hover)').slideUp();
于 2014-09-14T21:01:33.750 に答える
1

メソッドの 1 つを として使用した後、メソッドをチェーンすることはできませんgetter。は厳密には getter であるためhasClass()、決して連鎖できない jQuery API の数少ないメソッドの 1 つです。

チェーンできない他の getter の例:

$(selector).val() ; /* returns string or array*/
$(selector).css('color'); /* with only one argument will return a value and not the element collection */

セッターとして使用すると、セレクターによって参照される要素コレクションを返すため、上記の両方のメソッドを連鎖させることができます。

$(selector).val(400).addClass('someClass') ;
$(selector).css('color','blue').somePlugin();
于 2014-09-14T20:59:10.460 に答える