2010-07-19 5 views
1

В функции javascript я использую document.body.clientHeight, чтобы получить высоту тела. Теперь, в зависимости от режима, в котором находится IE8 (т. Е. Quirks или standard), значение отличается.clientHeight возвращает разные значения в зависимости от режима IE8 в

Пример В причуд, document.body.clientHeight = 800px В стандарте document.body.clientHeight = 650px

Надежда Я смысл.

Пожалуйста, помогите.

ответ

4

Возвращаемое значение режима Quirks и стандартного режима несовместимо. Так как вы помечено как JQuery, просто используйте

$('body').height() или $(window).height() в зависимости от того, что вам нужно ... он фиксирует его внутри, так что вам не нужно вводить так:

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

При использовании функции JQuery я Stile получить различные значения. Любые другие идеи? В Quirks $ ('тело'). Ширина = 1239 $ ('тело'). Высота = 18 document.body.clientWidth = 1231 document.body.clientHeight = 176 В стандартах $ (» body = ширина: 1260 $ ('body'). height = 182 document.body.clientWidth = 125 document.body.clientHeight = 176 –

+0

Почему бы не форматировать :( –

4

IE фактически возвращает правильный значения для clientHeight и clientWidth в обоих режимах - но это делает высоту/ширину ящиков по-разному. См. Quirks Mode для демонстрации этого.

В режиме quirks IE отображает ширину/высоту заполнения и границы в пределах ширины/высоты окна. В стандартном режиме IE правильно отображает дополнение и границы в дополнение к объявленной ширине окна.

Лучший способ обеспечить согласованность, чтобы заставить IE в стандартном режиме, путем включения этого определения в начале файла:

<!doctype html> 
Смежные вопросы