只有当第页上存在div#边栏时,jquery才会触发
我使用以下代码控制ID为“侧边栏”的div只有当第页上存在div#边栏时,jquery才会触发,jquery,scroll,target,Jquery,Scroll,Target,我使用以下代码控制ID为“侧边栏”的div var top = $('#sidebar').offset().top - parseFloat($('#sidebar').css('marginTop').replace(/auto/, 0)); $(window).scroll(function (event) { // what the y position of the scroll is var y
var top = $('#sidebar').offset().top - parseFloat($('#sidebar').css('marginTop').replace(/auto/, 0));
$(window).scroll(function (event) {
// what the y position of the scroll is
var y = $(this).scrollTop();
// whether that's below the form
if (y >= top) {
// if so, ad the fixed class
$('#sidebar').addClass('fixed');
} else {
// otherwise remove it
$('#sidebar').removeClass('fixed');
}
});
但是,当ODE不包含div#边栏的页面抛出一个错误,指出#边栏为null(因为它不在那里!)
如果页面上有div#侧边栏,如何将此代码转换为只发生?如果我没有错,您可以使用
if($('#sidebar').length > 0)
{
//your code here
}
if ($('#sidebar').length > 0){
.............
}
要做到这一点。如果我没有错,你可以使用
if ($('#sidebar').length > 0){
.............
}
为了达到这个目的。你可以试试这个
if($('#sidebar').size > 0){
//your code
}
你可以试试这个
if($('#sidebar').size > 0){
//your code
}
您可以使用减少代码以检查它是否存在并缓存选择器,如下所示:
var sb = $('#sidebar');
if(sb.length) {
var top = sb.offset().top - parseFloat(sb.css('marginTop').replace(/auto/, 0));
$(window).scroll(function () {
sb.toggleClass('fixed', $(this).scrollTop() >= top);
});
}
返回选择器找到的元素数,如果它不在那里,它将是
0
或false
,用于我们的if()
检查。之后,我们将根据滚动位置更简洁地添加或删除类。您可以使用来减少代码,以检查它是否存在并缓存选择器,如下所示:
var sb = $('#sidebar');
if(sb.length) {
var top = sb.offset().top - parseFloat(sb.css('marginTop').replace(/auto/, 0));
$(window).scroll(function () {
sb.toggleClass('fixed', $(this).scrollTop() >= top);
});
}
返回选择器找到的元素数,如果它不在那里,它将是
0
或false
,用于我们的if()
检查。在此之后,我们将根据滚动位置更简洁地添加或删除类。并不是真正针对这个问题,但您可以用以下内容替换整个滚动内容:$(“#侧栏”).toggleClass('fixed',$(this.scrollTop()>=top)代码>:)@Nick谢谢!清理代码总是很好。这实际上来自我在这里找到的一个教程:不是直接针对问题,但是可以用以下内容替换整个滚动内容:$(“#边栏”).toggleClass('fixed',$(This.scrollTop()>=top)代码>:)@Nick谢谢!清理代码总是很好。这实际上是我在这里找到的一个教程:.size()
是一个方法…它实际上只调用.length
:).size()
是一个方法…它实际上只调用.length
:)