@@ -4,6 +4,31 @@ define( [
44 "../css/var/isHidden"
55] , function ( jQuery , dataPriv , isHidden ) {
66
7+ var defaultDisplayMap = { } ;
8+
9+ function getDefaultDisplay ( elem ) {
10+ var temp ,
11+ doc = elem . ownerDocument ,
12+ nodeName = elem . nodeName ,
13+ display = defaultDisplayMap [ nodeName ] ;
14+
15+ if ( display ) {
16+ return display ;
17+ }
18+
19+ temp = doc . body . appendChild ( doc . createElement ( nodeName ) ) ,
20+ display = jQuery . css ( temp , "display" ) ;
21+
22+ temp . parentNode . removeChild ( temp ) ;
23+
24+ if ( display === "none" ) {
25+ display = "block" ;
26+ }
27+ defaultDisplayMap [ nodeName ] = display ;
28+
29+ return display ;
30+ }
31+
732function showHide ( elements , show ) {
833 var display , elem ,
934 values = [ ] ,
@@ -19,23 +44,30 @@ function showHide( elements, show ) {
1944
2045 display = elem . style . display ;
2146 if ( show ) {
22- if ( display === "none" ) {
2347
24- // Restore a pre-hide() value if we have one
25- values [ index ] = dataPriv . get ( elem , "display" ) || "" ;
48+ // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
49+ // check is required in this first loop unless we have a nonempty display value (either
50+ // inline or about-to-be-restored)
51+ if ( display === "none" ) {
52+ values [ index ] = dataPriv . get ( elem , "display" ) || null ;
53+ if ( ! values [ index ] ) {
54+ elem . style . display = "" ;
55+ }
56+ }
57+ if ( elem . style . display === "" && jQuery . css ( elem , "display" ) === "none" ) {
58+ values [ index ] = getDefaultDisplay ( elem ) ;
2659 }
2760 } else {
2861 if ( display !== "none" ) {
2962 values [ index ] = "none" ;
3063
31- // Remember the value we're replacing
64+ // Remember what we're overwriting
3265 dataPriv . set ( elem , "display" , display ) ;
3366 }
3467 }
3568 }
3669
37- // Set the display of the elements in a second loop
38- // to avoid the constant reflow
70+ // Set the display of the elements in a second loop to avoid constant reflow
3971 for ( index = 0 ; index < length ; index ++ ) {
4072 if ( values [ index ] != null ) {
4173 elements [ index ] . style . display = values [ index ] ;
0 commit comments