2010-08-19 5 views
0

J'utilise le code suivant pour commander un div avec l'ID barre latérale 'jquery seulement si le feu div # barre latérale existe à la page

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'); 
       } 
       }); 

Cependant, quand une page qui odes contient div # barre latérale, il jette sur une erreur indiquant que #sidebar est null (parce que ce n'est pas là!)

Comment puis-je convertir ce code pour arriver seulement s'il y a div # sidebar sur la page?

+0

Pas vraiment directement à la question, mais vous pouvez remplacer le contenu entier du défilement avec ceci: '$ ('# sidebar'). ToggleClass ('fixed', $ (this) .scrollTop()> top);' :) –

+0

@Nick Merci! Toujours agréable de nettoyer le code. C'était en fait d'un tutoriel que j'ai trouvé ici: http://jqueryfordesigners.com/fixed-floating-elements/ –

Répondre

2

Si je ne me trompe pas, vous pouvez utiliser

if ($('#sidebar').length > 0){ 

    ............. 

} 

pour y parvenir.

+0

Merci les gars - a travaillé un régal! –

1
if($('#sidebar').length > 0) 
{ 
//your code here 
} 
0

Vous pouvez essayer ceci.

if($('#sidebar').size > 0){ 

//your code 

} 
+1

'.size()' est une méthode ... qui appelle juste '.length' :) –

2

Vous pouvez réduire votre code vers le bas à l'aide .length pour vérifier si elle existe et cache le sélecteur, comme ceci:

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); 
    }); 
}​ 

.length renvoie le nombre d'éléments du sélecteur trouvé, si ce n'est pas là, il Pour les besoins de notre vérification if(), il s'agira de 0 ou de false. Après cela, nous utilisons .toggleClass(class, bool) pour ajouter ou supprimer la classe en fonction de la position de défilement.