2010-11-10 7 views

Répondre

11

Cela devrait fonctionner

$.fn.hasVerticalScrollBar = function() { 
    return this[0].clientHeight < this[0].scrollHeight; 
} 

$.fn.hasHorizontalScrollBar = function() { 
    return this[0].clientWidth < this[0].scrollWidth; 
} 

Utilisation

alert($('#mydivid').hasHorizontalScrollBar()); 
alert($('#mydivid').hasVerticalScrollBar()); 

EDIT:

Pour utiliser cette méthode avec invisible élément, clone la div, définissez son opacité à 0, ajoutez le clone au corps, vérifier si le clone a la barre de défilement, puis retirez la clone: ​​

var clone = $('#mydivid').clone(); 
clone.css('opacity', '0').appendTo('body'); 
if (clone.hasHorizontalScrollBar()) { 
    //do the job here 
} 
clone.remove(); 
+1

Correction d'un couple de fautes de frappe pour vous. +1 pour une excellente réponse, bien que [cela puisse se jouer dans Opera] (http://www.quirksmode.org/dom/w3c_cssom.html#t36). – lonesomeday

+0

@lonesomeday Eh bien j'ai frappé la plupart des navigateurs ... Opera est une part mineure du marché –

+0

Grande réponse merci! – Dave

0

Vous pouvez envelopper le texte dans un autre div, et comparer la largeur/hauteur de celui-là avec #myDiv. S'il est plus grand, il y a une barre de défilement:

<div id="myDiv" style="..."> 
    <div id="inner">random amount of lorem ipsum...</div> 
</div> 

Exemple:

if($('#inner').height() > $('#myDiv').height()){ 
    alert('vertical scrollbar'); 
} 

if($('#inner').width() > $('#myDiv').width()){ 
    alert('horizontal scrollbar'); 
} 
+0

.. Cela ne fonctionnerait pas s'il y avait un remplissage ou des marges sur le div interne, car mydiv serait toujours plus grand. –

Questions connexes