2010-07-19 9 views
1

Dans une fonction javascript, j'utilise document.body.clientHeight pour obtenir la hauteur du corps. Maintenant, en fonction du mode IE8 est (par exemple quirks ou standard), la valeur est différente.clientHeight renvoie différentes valeurs en fonction du mode IE8 est en

Exemple En bizarreries, document.body.clientHeight = 800px En standard, document.body.clientHeight = 650px

Espoir J'ai fait sens.

Aidez-nous s'il vous plaît.

Répondre

4

Le mode Quirks et la valeur de retour du mode Standards sont incohérents. Puisque vous il etiquettée comme jQuery, il suffit d'utiliser

$('body').height() ou $(window).height() en fonction de ce que vous avez besoin ... il fixe en interne de sorte que vous n'avez pas à taper ceci:

jQuery.each([ "Height", "Width" ], function(i, name) { 

    var type = name.toLowerCase(); 

    // innerHeight and innerWidth 
    jQuery.fn["inner" + name] = function() { 
     return this[0] ? 
      jQuery.css(this[0], type, false, "padding") : 
      null; 
    }; 

    // outerHeight and outerWidth 
    jQuery.fn["outer" + name] = function(margin) { 
     return this[0] ? 
      jQuery.css(this[0], type, false, margin ? "margin" : "border") : 
      null; 
    }; 

    jQuery.fn[ type ] = function(size) { 
     // Get window width or height 
     var elem = this[0]; 
     if (!elem) { 
      return size == null ? null : this; 
     } 

     if (jQuery.isFunction(size)) { 
      return this.each(function(i) { 
       var self = jQuery(this); 
       self[ type ](size.call(this, i, self[ type ]())); 
      }); 
     } 

     return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window? 
      // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode 
      elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] || 
      elem.document.body[ "client" + name ] : 

      // Get document width or height 
      (elem.nodeType === 9) ? // is it a document 
       // Either scroll[Width/Height] or offset[Width/Height], whichever is greater 
       Math.max(
        elem.documentElement["client" + name], 
        elem.body["scroll" + name], elem.documentElement["scroll" + name], 
        elem.body["offset" + name], elem.documentElement["offset" + name] 
       ) : 

       // Get or set width or height on the element 
       size === undefined ? 
        // Get width or height on the element 
        jQuery.css(elem, type) : 

        // Set the width or height on the element (default to pixels if value is unitless) 
        this.css(type, typeof size === "string" ? size : size + "px"); 
    }; 

}); 
+1

Lorsque vous utilisez la fonction jquery i Stile obtenir des valeurs différentes. D'autres idées? Dans Quirks $ ('corps'). Width = 1239 $ ('corps'). Height = 184 document.body.clientWidth = 1231 document.body.clientHeight = 176 Dans les normes $ (» body '). width = 1260 $ (' body '). height = 182 document.body.clientWidth = 1254 document.body.clientHeight = 176 –

+0

Pourquoi ne formera-t-il pas :( –

4

IE retourne effectivement le bon Dans les deux modes, les valeurs sont clientHeight et clientWidth, mais la hauteur/largeur des boîtes est différente. Voir Quirks Mode pour une démo de cela.

En mode quirks, IE affiche la largeur/hauteur du remplissage et des bordures dans la largeur/hauteur de la boîte - en mode standard IE affiche correctement le remplissage et les bordures en plus de la largeur déclarée de la boîte.

La meilleure façon d'assurer la cohérence est de forcer IE en mode standard, en incluant cette définition au début de votre fichier:

<!doctype html>