clientHeight возвращает разные значения в зависимости от режима, в котором находится IE8 - PullRequest
1 голос
/ 19 июля 2010

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

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

Надеюсь, я понял.

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

Ответы [ 2 ]

4 голосов
/ 19 июля 2010

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

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

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

<!doctype html>
4 голосов
/ 19 июля 2010

Значение режима Quirks и возвращаемого значения в режиме Standards несовместимо.Поскольку вы пометили его как 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" );
    };

});
...