aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/css.js17
-rw-r--r--test/data/testsuite.css2
-rw-r--r--test/index.html1
-rw-r--r--test/unit/css.js23
4 files changed, 39 insertions, 4 deletions
diff --git a/src/css.js b/src/css.js
index 9cd38b287..e8edd9f73 100644
--- a/src/css.js
+++ b/src/css.js
@@ -54,7 +54,7 @@ function getStyles( elem ) {
}
function showHide( elements, show ) {
- var elem,
+ var display, elem, hidden,
values = [],
index = 0,
length = elements.length;
@@ -64,11 +64,13 @@ function showHide( elements, show ) {
if ( !elem.style ) {
continue;
}
+
values[ index ] = jQuery._data( elem, "olddisplay" );
+ display = elem.style.display;
if ( show ) {
// Reset the inline display of this element to learn if it is
// being hidden by cascaded rules or not
- if ( !values[ index ] && elem.style.display === "none" ) {
+ if ( !values[ index ] && display === "none" ) {
elem.style.display = "";
}
@@ -78,8 +80,15 @@ function showHide( elements, show ) {
if ( elem.style.display === "" && isHidden( elem ) ) {
values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
}
- } else if ( !values[ index ] && !isHidden( elem ) ) {
- jQuery._data( elem, "olddisplay", jQuery.css( elem, "display" ) );
+ } else {
+
+ if ( !values[ index ] ) {
+ hidden = isHidden( elem );
+
+ if ( display && display !== "none" || !hidden ) {
+ jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+ }
+ }
}
}
diff --git a/test/data/testsuite.css b/test/data/testsuite.css
index 6bb3a5ded..1dfa7cd34 100644
--- a/test/data/testsuite.css
+++ b/test/data/testsuite.css
@@ -151,3 +151,5 @@ section { background:#f0f; display:block; }
/* #11971 */
#foo { background: url(1x1.jpg) right bottom no-repeat; }
+
+#display { display: list-item !important; }
diff --git a/test/index.html b/test/index.html
index 918d7d2d7..f073054d8 100644
--- a/test/index.html
+++ b/test/index.html
@@ -318,6 +318,7 @@ Z</textarea>
</div>
<div id="fx-tests"></div>
+ <span id="display"></span>
</div>
</div>
</dl>
diff --git a/test/unit/css.js b/test/unit/css.js
index 5ce12c73f..27069f8a3 100644
--- a/test/unit/css.js
+++ b/test/unit/css.js
@@ -970,4 +970,27 @@ asyncTest( "Clearing a Cloned Element's Style Shouldn't Clear the Original Eleme
window.setTimeout( start, 1000 );
});
+asyncTest( "Make sure initialized display value for disconnected nodes is correct (#13310)", 4, function() {
+ var display = jQuery("#display").css("display"),
+ div = jQuery("<div/>");
+
+ equal( div.css( "display", "inline" ).hide().show().appendTo("body").css( "display" ), "inline", "Initialized display value has returned" );
+ div.remove();
+
+ div.css( "display", "none" ).hide();
+ equal( jQuery._data( div[ 0 ], "olddisplay" ), undefined, "olddisplay is undefined after hiding a detached and hidden element" );
+ div.remove();
+
+ div.css( "display", "inline-block" ).hide().appendTo("body").fadeIn(function() {
+ equal( div.css( "display" ), "inline-block", "Initialized display value has returned" );
+ div.remove();
+
+ start();
+ });
+
+ equal( jQuery._data( jQuery("#display").css( "display", "inline" ).hide()[ 0 ], "olddisplay" ), display,
+ "display: * !Important value should used as initialized display" );
+ jQuery._removeData( jQuery("#display")[ 0 ] );
+});
+
}