只有当第页上存在div#边栏时,jquery才会触发

只有当第页上存在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

我使用以下代码控制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 = $(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
:)