jquery中的条件代码元素或变量

时间:2012-10-11 22:53:55

标签: jquery conditional

我有一个变量,我希望在必要时不影响条件或不收费,即在这种情况下不是DIV#sidebar

我的代码是:

var top = $('#sidebar').offset().top - parseFloat($('#sidebar').css('margin-top').replace(/auto/, 0));
var _height = $('#sidebar').height();
var _original_top = $('#sidebar').offset().top;
$(window).scroll(function(event) {
    var y = $(this).scrollTop();
    var z = $('footer').offset().top;
    if (y >= top && (y + _height) < z) {
        $('#sidebar').removeClass('stuck-bottom').addClass('fixed');
    } else {
        if ((y + _height) > z) {
            $('#sidebar').removeClass('fixed').addClass('stuck-bottom');
        }
        else $('#sidebar').removeClass('stuck-bottom').removeClass('fixed');
    }
});

如果我把这段代码不起作用:(

if ($('#sidebar')) { ... }

1 个答案:

答案 0 :(得分:2)

如果问题是您的if始终执行代码,则需要更改检测#sidebar是否存在的方式。这可能是因为$('#sidebar')通常会求值为true,即使没有匹配的元素,因为$()返回一个有效的jQuery对象。要在#sidebar实际存在时才使条件成功,请尝试:

if ($('#sidebar').length) { ... }

但是,如果您的问题是即使存在#sidebar条件也不会成功,您的代码可能会在加载DOM之前执行。您需要将代码包装在$.ready()函数中,因此在页面下载,解析和呈现之前它不会执行:

jQuery(function($) {
    if ($('#sidebar').length) { ... }
});