Bug Tracker

Ticket #2071: css.2.diff

File css.2.diff, 2.1 KB (added by brandon, 14 years ago)
  • src/core.js

     
    352352                        else
    353353                                selector = jQuery.multiFilter( selector, this );
    354354
    355                 var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
    356355                return this.filter(function() {
    357                         return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
     356                        return jQuery.inArray( this, selector ) < 0;
    358357                });
    359358        },
    360359
     
    764763
    765764        // A method for quickly swapping in/out CSS properties to get correct calculations
    766765        swap: function( elem, options, callback ) {
     766                var old = {};
    767767                // Remember the old values, and insert the new ones
    768768                for ( var name in options ) {
    769                         elem.style[ "old" + name ] = elem.style[ name ];
     769                        old[ name ] = elem.style[ name ];
    770770                        elem.style[ name ] = options[ name ];
    771771                }
    772772
     
    774774
    775775                // Revert the old values
    776776                for ( var name in options )
    777                         elem.style[ name ] = elem.style[ "old" + name ];
     777                        elem.style[ name ] = old[ name ];
    778778        },
    779779
    780780        css: function( elem, name, force ) {
    781781                if ( name == "width" || name == "height" ) {
    782                         var width, height, props = { position: "absolute", visibility: "hidden", display:"block" };
     782                        var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
    783783               
    784784                        function getWH() {
    785                                 width = elem.clientWidth;
    786                                 height = elem.clientHeight;
     785                                val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
     786                                var padding = 0, border = 0;
     787                                jQuery.each( which, function() {
     788                                        padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
     789                                        border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
     790                                });
     791                                val -= Math.round(padding + border);
    787792                        }
    788793               
    789794                        if ( jQuery(elem).is(":visible") )
    790795                                getWH();
    791796                        else
    792797                                jQuery.swap( elem, props, getWH );
    793 
    794                         return name == "width" ? width : height;
     798                       
     799                        return val;
    795800                }
    796801               
    797802                return jQuery.curCSS( elem, name, force );