Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gf3/944186 to your computer and use it in GitHub Desktop.
Save gf3/944186 to your computer and use it in GitHub Desktop.
New defaultDisplay()
var elemDisplays = {},
// Store the iframe outside the function to reuse it
iframe;
function defaultDisplay( nodeName ) {
if ( !elemDisplays[ nodeName ] ) {
// Try the classical method first, which is far faster
var elem = document.createElement( nodeName ),
display;
document.body.appendChild( elem );
display = window.getComputedStyle( elem ).getPropertyValue( "display" );
document.body.removeChild( elem );
// if the display value is "none", use an iframe
if ( display === "none" || display === "false" ) {
// No iframe to use yet, so create it
if ( !iframe ) {
iframe = document.createElement( "iframe" );
iframe.frameBorder = iframe.width = iframe.height = 0;
}
document.body.appendChild( iframe );
/* Create a cacheable copy of the iframe document on
* first call.
* IE and Opera will allow us to reuse the iframeDoc
* without re-writing the fake html document to it,
* WebKit & Firefox won't allow reusing the iframe document
*/
if ( !iframeDoc || !iframe.createElement ) {
iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
iframeDoc.write( "<!doctype><html><body></body></html>" );
}
elem = iframeDoc.createElement( nodeName );
iframeDoc.body.appendChild( elem );
display = jQuery.css( elem, "display" );
document.body.removeChild( iframe );
}
elemDisplays[ nodeName ] = display;
}
return elemDisplays[ nodeName ];
}
var elemDisplays = {},
// Store the iframe outside the function to reuse it
iframe,
iframeDoc;
function defaultDisplay( nodeName ) {
if ( !elemDisplays[ nodeName ] ) {
// Try the classical method first, which is far faster
var elem = document.createElement( nodeName ),
display;
document.body.appendChild( elem );
display = elem.ownerDocument.defaultView ? window.getComputedStyle( elem ).getPropertyValue( "display" ) : "none";
document.body.removeChild( elem );
// if the display value is "none", use an iframe
if ( display === "none" || display === "false" ) {
// No iframe to use yet, so create it
if ( !iframe ) {
iframe = document.createElement( "iframe" );
iframe.frameBorder = iframe.width = iframe.height = 0;
}
document.body.appendChild( iframe );
/* Create a cacheable copy of the iframe document on
* first call.
* IE and Opera will allow us to reuse the iframeDoc
* without re-writing the fake html document to it,
* WebKit & Firefox won't allow reusing the iframe document
*/
if ( !iframeDoc || !iframe.createElement ) {
iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
iframeDoc.write( "<!doctype html><html><body>" );
iframeDoc.close();
}
elem = iframeDoc.createElement( nodeName );
iframeDoc.body.appendChild( elem );
if ( document.defaultView && document.defaultView.getComputedStyle ) {
display = elem.ownerDocument.defaultView.getComputedStyle( elem, null ).getPropertyValue( 'display' );
if ( display == "" ) {
display = elem.style.display;
}
} else if ( document.documentElement.currentStyle ) {
display = elem.currentStyle[ 'display' ];
} else {
display = elem.style.display;
}
document.body.removeChild( iframe );
}
elemDisplays[ nodeName ] = display;
}
return elemDisplays[ nodeName ];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment