我有一个变量,我希望在必要时不影响条件或不收费,即在这种情况下不是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')) { ... }
答案 0 :(得分:2)
如果问题是您的if
始终执行代码,则需要更改检测#sidebar
是否存在的方式。这可能是因为$('#sidebar')
通常会求值为true,即使没有匹配的元素,因为$()
返回一个有效的jQuery对象。要在#sidebar
实际存在时才使条件成功,请尝试:
if ($('#sidebar').length) { ... }
但是,如果您的问题是即使存在#sidebar
条件也不会成功,您的代码可能会在加载DOM之前执行。您需要将代码包装在$.ready()
函数中,因此在页面下载,解析和呈现之前它不会执行:
jQuery(function($) {
if ($('#sidebar').length) { ... }
});