Jquery 是否可以在条件语句中链接hasClass()或Is()?

Jquery 是否可以在条件语句中链接hasClass()或Is()?,jquery,conditional-statements,jquery-chaining,Jquery,Conditional Statements,Jquery Chaining,我注意到在我的站点代码中有很多以下类型的条件语句: //Example 1 if ($("#myDiv1").hasClass("myClass1")) { $("#myDiv1").hide(); } //Example 2 if (!$("#myDiv2").is(":hover")) { $("#myDiv2").slideUp("slow"); } 下面是整理这一点的明显方法: //Example 1 var e1 = $("#myDiv1"); if (e1.has

我注意到在我的站点代码中有很多以下类型的条件语句:

//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
语句,我还是可以以某种方式链接这些函数。我尝试了这两行代码(认为它不起作用,也没有)


当DOM元素在
if
语句和
if
语句的参数中都相同时,有没有办法通过条件链接?

一种重写此元素以占用更少代码的方法如下所示。这种风格利用了JavaScript计算布尔语句的方式,有时被称为“短路”。基本上,每行的第二部分(在&&)只有在第一部分为true时才会执行

$("#myDiv1").hasClass("myClass1") && $("#myDiv1").hide();
!$("#myDiv2").is(":hover") && $("#myDiv2").slideUp("slow");

重写此代码以减少代码占用的一种方法如下所示。这种风格利用了JavaScript计算布尔语句的方式,有时被称为“短路”。基本上,每行的第二部分(在&&)只有在第一部分为true时才会执行

$("#myDiv1").hasClass("myClass1") && $("#myDiv1").hide();
!$("#myDiv2").is(":hover") && $("#myDiv2").slideUp("slow");

在将其中一个方法用作
getter
之后,无法链接方法。由于
hasClass()
严格来说是一个getter,因此它是jQueryAPI中少数几个永远无法链接的方法之一

无法链接到的其他getter的示例:

$(selector).val() ; /* returns string or array*/
$(selector).css('color'); /* with only one argument will return a value and not the element collection */
当用作setter时,上述两个方法都可以链接,因为它们将返回选择器引用的元素集合:

$(selector).val(400).addClass('someClass') ;
$(selector).css('color','blue').somePlugin();
$('#myDiv1.myClass1').hide();

在将其中一个方法用作
getter
之后,无法链接方法。由于
hasClass()
严格来说是一个getter,因此它是jQueryAPI中少数几个永远无法链接的方法之一

无法链接到的其他getter的示例:

$(selector).val() ; /* returns string or array*/
$(selector).css('color'); /* with only one argument will return a value and not the element collection */
当用作setter时,上述两个方法都可以链接,因为它们将返回选择器引用的元素集合:

$(selector).val(400).addClass('someClass') ;
$(selector).css('color','blue').somePlugin();
$('#myDiv1.myClass1').hide();

很简单。组合选择器:

$(selector).val(400).addClass('someClass') ;
$(selector).css('color','blue').somePlugin();
$('#myDiv1.myClass1').hide();


很简单。组合选择器:

$(selector).val(400).addClass('someClass') ;
$(selector).css('color','blue').somePlugin();
$('#myDiv1.myClass1').hide();



请注意,这完全取代了您的代码,不需要if语句或类似的语句,只需要这两行代码。查看下面的文章,了解有关短路布尔计算的进一步解释。艰难的决定…虽然YMMD的代码非常简洁,但我喜欢&&givesNote的灵活性,它完全取代了您的代码,不需要if语句或类似的语句,只需要这两行。查看下面的文章,了解有关短路布尔计算的进一步解释。艰难的决定……虽然YMMD的代码非常简洁,但我喜欢&givesOK的灵活性,我明白了……而不是像$(“#myDiv”).css({“display”:“block”})这样的“setter”//我明白了,您可以在postOK中链接这个,但不能链接“getter”版本……而不是像$(“#myDiv”).css({“display”:“block”})这样的“setter”//您可以在post中链接这个,但不能链接“getter”版本,但我需要某种形式的条件语句:)但是为什么?:)代码仅选择ID为myDiv1、类为myClass1的元素。这正是你的代码所做的。jQuery无法识别
:hover
我正在使用jQuery 1.11.0,它似乎可以工作,尽管我已经读到有人在IE8中遇到问题:hover…不确定这是否仍然有效…我收回它。jQuery已经出现很多年了,很久以前它还没有出现在API中,浏览器也不会合作,但是我需要某种形式的条件语句:)但是为什么?:)代码仅选择ID为myDiv1、类为myClass1的元素。这正是你的代码所做的。jQuery无法识别
:hover
我正在使用jQuery 1.11.0,它似乎可以工作,尽管我已经读到有人在IE8中遇到问题:hover…不确定这是否仍然有效…我收回它。jQuery已经存在多年了,很久以前它还没有出现在API中,浏览器也不会合作。下面是另一个使用toggle()和布尔参数的有用方法:
elem.toggle(elem.hasClass('myClass'))
…如果为true,则显示,如果为true,则隐藏false@charlietfi....thanks...another有用的例子下面是另一个使用toggle()的有用例子使用布尔参数:
elem.toggle(elem.hasClass('myClass'))
…如果为true,则显示,如果为true,则隐藏false@charlietfi....thanks...another有用的例子