Jquery if else语句表现

时间:2011-12-04 16:49:39

标签: jquery performance conditional

我正在使用旋转木马设计响应式布局。旋转木马有一个控件,允许用户切换整个盒子,隐藏和显示旋转木马。你可以在这里看到完全正常的工作:http://pixelcakecreative.com/cimlife/responsive2/

似乎它的运作非常缓慢。我以为我的jquery写得不好,可能会降低性能。我的jquery如下:

$("#closeBox a").click(function(){
            if ($(this).find('span').hasClass('minus')) {
               $(this).find('span').removeClass('minus').addClass('plus');
               $(".padCar").css("padding-bottom","0");

            } else if ($(this).find('span').hasClass('plus')) {
                 $(this).find('span').removeClass('plus').addClass('minus');
                 $(".padCar").css("padding-bottom","20px");
            }
            $('#carousel').slideToggle('slow');

        return false;
        });

为什么它如此跳跃的任何想法?也许我的jquery应该写得更好,或者页面上的其他内容可能会导致这个问题?

3 个答案:

答案 0 :(得分:2)

首先,您需要缓存选择器,因此您应该使用

var span = $(this).find('span');

然后只使用span.someFunction(); - 这会减少DOM查询并加快速度。

另外,如何为初始选择器添加上下文?因此,如果您知道您所定位的链接位于带有.myBox类的div中,请使用:

$('#closebox a', '.myBox')

甚至更好,使用delegate():

$('.myBox').delegate('#closebox a', 'click', function(){ ... });

<强>更新

John Hartsock和RightSaidFred指出,如果使用v1.7 +,你应该使用on()而不是delegate(),如下所示:

$('.myBox').on('click', '#closebox a', function(){ ... });

答案 1 :(得分:1)

您有很多冗余,您可以开始将这些$(this).find('span')替换为var span = $(this).find('span')

$("#closeBox a").click(function(){
       var span = $( this ).find( 'span' );
       if ( span.hasClass('minus')) {
           span.removeClass('minus').addClass('plus');
           $(".padCar").css("padding-bottom","0");
       } else if ( span.hasClass('plus')) {
          span.removeClass('plus').addClass('minus');
          $(".padCar").css("padding-bottom","20px");
       }
       $('#carousel').slideToggle('slow');
       return false;
});

答案 2 :(得分:0)

$("#closeBox a").click(function(){
var spn = $(this).find('span');
            if (spn.hasClass('minus')) {
               spn.removeClass('minus').addClass('plus');
               $(".padCar").css("padding-bottom","0");

            } else {
                 spn.removeClass('plus').addClass('minus');
                 $(".padCar").css("padding-bottom","20px");
            }
            $('#carousel').slideToggle('slow');

        return false;
        });