@@ -4,6 +4,31 @@ define( [
4
4
"../css/var/isHidden"
5
5
] , function ( jQuery , dataPriv , isHidden ) {
6
6
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
+
7
32
function showHide ( elements , show ) {
8
33
var display , elem ,
9
34
values = [ ] ,
@@ -19,23 +44,30 @@ function showHide( elements, show ) {
19
44
20
45
display = elem . style . display ;
21
46
if ( show ) {
22
- if ( display === "none" ) {
23
47
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 ) ;
26
59
}
27
60
} else {
28
61
if ( display !== "none" ) {
29
62
values [ index ] = "none" ;
30
63
31
- // Remember the value we're replacing
64
+ // Remember what we're overwriting
32
65
dataPriv . set ( elem , "display" , display ) ;
33
66
}
34
67
}
35
68
}
36
69
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
39
71
for ( index = 0 ; index < length ; index ++ ) {
40
72
if ( values [ index ] != null ) {
41
73
elements [ index ] . style . display = values [ index ] ;
0 commit comments