@@ -168,12 +168,11 @@ jQuery.curCSS = jQuery.css;
168
168
jQuery . each ( [ "height" , "width" ] , function ( i , name ) {
169
169
jQuery . cssHooks [ name ] = {
170
170
get : function ( elem , computed , extra ) {
171
- var val ;
171
+ var val , fellback = false ;
172
172
173
173
if ( computed ) {
174
174
if ( elem . offsetWidth !== 0 ) {
175
175
val = getWH ( elem , name , extra ) ;
176
-
177
176
} else {
178
177
jQuery . swap ( elem , cssShow , function ( ) {
179
178
val = getWH ( elem , name , extra ) ;
@@ -188,20 +187,37 @@ jQuery.each(["height", "width"], function( i, name ) {
188
187
}
189
188
190
189
if ( val != null ) {
191
- // Should return "auto" instead of 0, use 0 for
192
- // temporary backwards-compat
193
- return val === "" || val === "auto" ? "0px" : val ;
190
+ fellback = true ;
194
191
}
195
192
}
196
193
197
- if ( val < 0 || val == null ) {
194
+ if ( ! fellback && ( val < 0 || val == null ) ) {
198
195
val = elem . style [ name ] ;
199
- // Should return "auto" instead of 0, use 0 for
200
- // temporary backwards-compat
201
- return val === "" || val === "auto" ? "0px" : val ;
196
+ fellback = true ;
197
+ }
198
+
199
+ // Should return "auto" instead of 0, use 0 for
200
+ // temporary backwards-compat
201
+ if ( fellback && ( val === "" || val === "auto" ) ) {
202
+ val = "0px" ;
203
+ } else if ( typeof val !== "string" ) {
204
+ val += "px" ;
202
205
}
203
206
204
- return typeof val === "string" ? val : val + "px" ;
207
+ if ( extra ) {
208
+ val = parseFloat ( val ) || 0 ;
209
+ if ( fellback ) {
210
+ val += adjustWH ( elem , name , "padding" ) ;
211
+ if ( extra !== "padding" ) {
212
+ val += adjustWH ( elem , name , "border" , "Width" ) ;
213
+ }
214
+ }
215
+ if ( extra === "margin" ) {
216
+ val += adjustWH ( elem , name , "margin" ) ;
217
+ }
218
+ }
219
+
220
+ return val ;
205
221
}
206
222
} ,
207
223
@@ -331,24 +347,33 @@ if ( document.documentElement.currentStyle ) {
331
347
curCSS = getComputedStyle || currentStyle ;
332
348
333
349
function getWH ( elem , name , extra ) {
334
- var which = name === "width" ? cssWidth : cssHeight ,
335
- val = name === "width" ? elem . offsetWidth : elem . offsetHeight ;
350
+ var val = name === "width" ? elem . offsetWidth : elem . offsetHeight ;
336
351
337
352
if ( extra === "border" ) {
338
353
return val ;
339
354
}
340
355
341
- jQuery . each ( which , function ( ) {
342
- if ( ! extra ) {
343
- val -= parseFloat ( jQuery . css ( elem , "padding" + this ) ) || 0 ;
344
- }
356
+ if ( ! extra ) {
357
+ val -= adjustWH ( elem , name , "padding" ) ;
358
+ }
345
359
346
- if ( extra === "margin" ) {
347
- val += parseFloat ( jQuery . css ( elem , "margin" + this ) ) || 0 ;
360
+ if ( extra !== "margin" ) {
361
+ val -= adjustWH ( elem , name , "border" , "Width" ) ;
362
+ }
348
363
349
- } else {
350
- val -= parseFloat ( jQuery . css ( elem , "border" + this + "Width" ) ) || 0 ;
351
- }
364
+ return val ;
365
+ }
366
+
367
+ function adjustWH ( elem , name , prepend , append ) {
368
+ var which = name === "width" ? cssWidth : cssHeight ,
369
+ val = 0 ;
370
+
371
+ if ( ! append ) {
372
+ append = "" ;
373
+ }
374
+
375
+ jQuery . each ( which , function ( ) {
376
+ val += parseFloat ( jQuery . css ( elem , prepend + this + append ) ) || 0 ;
352
377
} ) ;
353
378
354
379
return val ;
0 commit comments