mirror of
https://github.com/jquery/jquery.git
synced 2026-04-20 03:01:22 -04:00
CSS: Restore cascade-override behavior in .show
Fixes gh-2654
Fixes gh-2308
Close gh-2810
Ref 86419b10bf
This commit is contained in:
committed by
Timmy Willison
parent
a268f5225c
commit
dba93f79c4
@@ -4,6 +4,31 @@ define( [
|
||||
"../css/var/isHidden"
|
||||
], function( jQuery, dataPriv, isHidden ) {
|
||||
|
||||
var defaultDisplayMap = {};
|
||||
|
||||
function getDefaultDisplay( elem ) {
|
||||
var temp,
|
||||
doc = elem.ownerDocument,
|
||||
nodeName = elem.nodeName,
|
||||
display = defaultDisplayMap[ nodeName ];
|
||||
|
||||
if ( display ) {
|
||||
return display;
|
||||
}
|
||||
|
||||
temp = doc.body.appendChild( doc.createElement( nodeName ) ),
|
||||
display = jQuery.css( temp, "display" );
|
||||
|
||||
temp.parentNode.removeChild( temp );
|
||||
|
||||
if ( display === "none" ) {
|
||||
display = "block";
|
||||
}
|
||||
defaultDisplayMap[ nodeName ] = display;
|
||||
|
||||
return display;
|
||||
}
|
||||
|
||||
function showHide( elements, show ) {
|
||||
var display, elem,
|
||||
values = [],
|
||||
@@ -19,23 +44,30 @@ function showHide( elements, show ) {
|
||||
|
||||
display = elem.style.display;
|
||||
if ( show ) {
|
||||
if ( display === "none" ) {
|
||||
|
||||
// Restore a pre-hide() value if we have one
|
||||
values[ index ] = dataPriv.get( elem, "display" ) || "";
|
||||
// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
|
||||
// check is required in this first loop unless we have a nonempty display value (either
|
||||
// inline or about-to-be-restored)
|
||||
if ( display === "none" ) {
|
||||
values[ index ] = dataPriv.get( elem, "display" ) || null;
|
||||
if ( !values[ index ] ) {
|
||||
elem.style.display = "";
|
||||
}
|
||||
}
|
||||
if ( elem.style.display === "" && jQuery.css( elem, "display" ) === "none" ) {
|
||||
values[ index ] = getDefaultDisplay( elem );
|
||||
}
|
||||
} else {
|
||||
if ( display !== "none" ) {
|
||||
values[ index ] = "none";
|
||||
|
||||
// Remember the value we're replacing
|
||||
// Remember what we're overwriting
|
||||
dataPriv.set( elem, "display", display );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set the display of the elements in a second loop
|
||||
// to avoid the constant reflow
|
||||
// Set the display of the elements in a second loop to avoid constant reflow
|
||||
for ( index = 0; index < length; index++ ) {
|
||||
if ( values[ index ] != null ) {
|
||||
elements[ index ].style.display = values[ index ];
|
||||
|
||||
Reference in New Issue
Block a user