@@ -172,59 +172,21 @@ jQuery.each(["height", "width"], function( i, name ) {
172
172
173
173
if ( computed ) {
174
174
if ( elem . offsetWidth !== 0 ) {
175
- val = getWH ( elem , name , extra ) ;
175
+ return getWH ( elem , name , extra ) ;
176
176
} else {
177
177
jQuery . swap ( elem , cssShow , function ( ) {
178
178
val = getWH ( elem , name , extra ) ;
179
179
} ) ;
180
180
}
181
181
182
- if ( val <= 0 ) {
183
- val = curCSS ( elem , name , name ) ;
184
-
185
- if ( val === "0px" && currentStyle ) {
186
- val = currentStyle ( elem , name , name ) ;
187
- }
188
-
189
- if ( val != null ) {
190
- fellback = true ;
191
- }
192
- }
193
-
194
- if ( ! fellback && ( val < 0 || val == null ) ) {
195
- val = elem . style [ name ] ;
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" ;
205
- }
206
-
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
182
return val ;
221
183
}
222
184
} ,
223
185
224
186
set : function ( elem , value ) {
225
187
if ( rnumpx . test ( value ) ) {
226
188
// ignore negative width and height values #1599
227
- value = parseFloat ( value ) ;
189
+ value = parseFloat ( value ) ;
228
190
229
191
if ( value >= 0 ) {
230
192
return value + "px" ;
@@ -347,36 +309,51 @@ if ( document.documentElement.currentStyle ) {
347
309
curCSS = getComputedStyle || currentStyle ;
348
310
349
311
function getWH ( elem , name , extra ) {
350
- var val = name === "width" ? elem . offsetWidth : elem . offsetHeight ;
351
312
352
- if ( extra === "border" ) {
353
- return val ;
354
- }
313
+ // Start with offset property
314
+ var val = name === "width" ? elem . offsetWidth : elem . offsetHeight ,
315
+ which = name === "width" ? cssWidth : cssHeight ;
355
316
356
- if ( ! extra ) {
357
- val -= adjustWH ( elem , name , "padding" ) ;
317
+ if ( extra !== "margin" && extra !== "border" ) {
318
+ jQuery . each ( which , function ( ) {
319
+ val -= parseFloat ( jQuery . css ( elem , "border" + this + "Width" ) ) || 0 ;
320
+ if ( ! extra ) {
321
+ val -= parseFloat ( jQuery . css ( elem , "padding" + this ) ) || 0 ;
322
+ }
323
+ } ) ;
358
324
}
359
325
360
- if ( extra !== "margin" ) {
361
- val -= adjustWH ( elem , name , "border" , "Width" ) ;
326
+ if ( val > 0 ) {
327
+ if ( extra === "margin" ) {
328
+ jQuery . each ( which , function ( ) {
329
+ val += parseFloat ( jQuery . css ( elem , extra + this ) ) || 0 ;
330
+ } ) ;
331
+ }
332
+ return val + "px" ;
362
333
}
363
334
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 = "" ;
335
+ // Fall back to computed then uncomputed css if necessary
336
+ val = curCSS ( elem , name , name ) ;
337
+ if ( val < 0 || val == null ) {
338
+ val = elem . style [ name ] || 0 ;
339
+ }
340
+ // Normalize "", auto, and prepare for extra
341
+ val = parseFloat ( val ) || 0 ;
342
+
343
+ // Add padding, border, margin
344
+ if ( extra ) {
345
+ jQuery . each ( which , function ( ) {
346
+ val += parseFloat ( jQuery . css ( elem , "padding" + this ) ) || 0 ;
347
+ if ( extra !== "padding" ) {
348
+ val += parseFloat ( jQuery . css ( elem , "border" + this + "Width" ) ) || 0 ;
349
+ }
350
+ if ( extra === "margin" ) {
351
+ val += parseFloat ( jQuery . css ( elem , extra + this ) ) || 0 ;
352
+ }
353
+ } ) ;
373
354
}
374
355
375
- jQuery . each ( which , function ( ) {
376
- val += parseFloat ( jQuery . css ( elem , prepend + this + append ) ) || 0 ;
377
- } ) ;
378
-
379
- return val ;
356
+ return val + "px" ;
380
357
}
381
358
382
359
if ( jQuery . expr && jQuery . expr . filters ) {
0 commit comments