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存在するかどうかを検出する方法を変更する必要があります。これは、有効な jQuery オブジェクトを返す$('#sidebar')ため、一致する要素がなくても、通常は true と評価されるためである可能性があります。実際に存在する$()場合にのみ条件が成功するようにするには、次を試してください。#sidebar

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

ただし、条件が#sidebar存在しても成功しないという問題がある場合は、DOM がロードされる前にコードが実行されている可能性があります。コードを関数でラップする必要がある$.ready()ため、ページがダウンロードされ、解析され、レンダリングされるまで実行されません。

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