Skip to content

Commit f3db084

Browse files
markelogdmethvin
authored andcommitted
Fix #13310. Get the right display value for disconnected nodes. Close jquerygh-1156.
1 parent a30785a commit f3db084

File tree

4 files changed

+39
-4
lines changed

4 files changed

+39
-4
lines changed

src/css.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ function getStyles( elem ) {
5454
}
5555

5656
function showHide( elements, show ) {
57-
var elem,
57+
var display, elem, hidden,
5858
values = [],
5959
index = 0,
6060
length = elements.length;
@@ -64,11 +64,13 @@ function showHide( elements, show ) {
6464
if ( !elem.style ) {
6565
continue;
6666
}
67+
6768
values[ index ] = jQuery._data( elem, "olddisplay" );
69+
display = elem.style.display;
6870
if ( show ) {
6971
// Reset the inline display of this element to learn if it is
7072
// being hidden by cascaded rules or not
71-
if ( !values[ index ] && elem.style.display === "none" ) {
73+
if ( !values[ index ] && display === "none" ) {
7274
elem.style.display = "";
7375
}
7476

@@ -78,8 +80,15 @@ function showHide( elements, show ) {
7880
if ( elem.style.display === "" && isHidden( elem ) ) {
7981
values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
8082
}
81-
} else if ( !values[ index ] && !isHidden( elem ) ) {
82-
jQuery._data( elem, "olddisplay", jQuery.css( elem, "display" ) );
83+
} else {
84+
85+
if ( !values[ index ] ) {
86+
hidden = isHidden( elem );
87+
88+
if ( display && display !== "none" || !hidden ) {
89+
jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
90+
}
91+
}
8392
}
8493
}
8594

test/data/testsuite.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,5 @@ section { background:#f0f; display:block; }
151151

152152
/* #11971 */
153153
#foo { background: url(1x1.jpg) right bottom no-repeat; }
154+
155+
#display { display: list-item !important; }

test/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@
318318
</div>
319319

320320
<div id="fx-tests"></div>
321+
<span id="display"></span>
321322
</div>
322323
</div>
323324
</dl>

test/unit/css.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -970,4 +970,27 @@ asyncTest( "Clearing a Cloned Element's Style Shouldn't Clear the Original Eleme
970970
window.setTimeout( start, 1000 );
971971
});
972972

973+
asyncTest( "Make sure initialized display value for disconnected nodes is correct (#13310)", 4, function() {
974+
var display = jQuery("#display").css("display"),
975+
div = jQuery("<div/>");
976+
977+
equal( div.css( "display", "inline" ).hide().show().appendTo("body").css( "display" ), "inline", "Initialized display value has returned" );
978+
div.remove();
979+
980+
div.css( "display", "none" ).hide();
981+
equal( jQuery._data( div[ 0 ], "olddisplay" ), undefined, "olddisplay is undefined after hiding a detached and hidden element" );
982+
div.remove();
983+
984+
div.css( "display", "inline-block" ).hide().appendTo("body").fadeIn(function() {
985+
equal( div.css( "display" ), "inline-block", "Initialized display value has returned" );
986+
div.remove();
987+
988+
start();
989+
});
990+
991+
equal( jQuery._data( jQuery("#display").css( "display", "inline" ).hide()[ 0 ], "olddisplay" ), display,
992+
"display: * !Important value should used as initialized display" );
993+
jQuery._removeData( jQuery("#display")[ 0 ] );
994+
});
995+
973996
}

0 commit comments

Comments
 (0)