0

我有一个变量,我不想影响条件或在必要时不收费,即在这种情况下不收费时 DIV # 侧边栏

我的代码是:

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')) { ... }
4

1 回答 1

2

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

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

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

jQuery(function($) {
    if ($('#sidebar').length) { ... }
});
于 2012-10-11T23:03:49.110 回答