- Added a hook to swap display none for width and height in browsers that do not sufficiently support get/setAttribute

This commit is contained in:
timmywil 2011-04-01 21:13:01 -04:00
parent 1e9b3ef3d8
commit 5fc2281fcc
3 changed files with 24 additions and 5 deletions

View file

@ -446,6 +446,20 @@ if ( !jQuery.support.getSetAttribute ) {
return value; return value;
} }
}; };
// Retrieving the width/height attributes on an
// element with display: none returns 0 in ie6/7 (#5413)
jQuery.each([ "width", "height" ], function( i, name ) {
jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
get: function( elem ) {
var ret;
jQuery.swap( elem, { visibility: "hidden", display: "block" }, function() {
ret = elem.getAttribute( name );
});
return ret;
}
});
});
} }
// Remove certain attrs if set to false // Remove certain attrs if set to false

View file

@ -549,7 +549,8 @@ jQuery.extend({
// Return the cloned set // Return the cloned set
return clone; return clone;
}, },
clean: function( elems, context, fragment, scripts ) { clean: function( elems, context, fragment, scripts ) {
context = context || document; context = context || document;

View file

@ -75,7 +75,7 @@ test("prop(String, Object)", function() {
}); });
test("attr(String)", function() { test("attr(String)", function() {
expect(28); expect(30);
equals( jQuery('#text1').attr('type'), "text", 'Check for type attribute' ); equals( jQuery('#text1').attr('type'), "text", 'Check for type attribute' );
equals( jQuery('#radio1').attr('type'), "radio", 'Check for type attribute' ); equals( jQuery('#radio1').attr('type'), "radio", 'Check for type attribute' );
@ -125,12 +125,16 @@ test("attr(String)", function() {
optgroup.appendChild( option ); optgroup.appendChild( option );
select.appendChild( optgroup ); select.appendChild( optgroup );
ok( jQuery("<div/>").attr("doesntexist") === undefined, "Make sure undefined is returned when no attribute is found." ); var $img = jQuery('<img style="display:none" width="215" height="53" src="http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif"/>').appendTo('body');
ok( jQuery().attr("doesntexist") === undefined, "Make sure undefined is returned when no element is there." ); equals( $img.attr('width'), "215", "Retrieve width attribute an an element with display:none." );
equals( $img.attr('height'), "53", "Retrieve height attribute an an element with display:none." );
// Check for style support // Check for style support
ok( !!~jQuery('#dl').attr('style').indexOf('absolute'), 'Check style attribute getter' ); ok( !!~jQuery('#dl').attr('style').indexOf('absolute'), 'Check style attribute getter' );
ok( !!~jQuery('#foo').attr('style', 'position:absolute;').attr('style').indexOf('absolute'), 'Check style setter' ); ok( !!~jQuery('#foo').attr('style', 'position:absolute;').attr('style').indexOf('absolute'), 'Check style setter' );
ok( jQuery("<div/>").attr("doesntexist") === undefined, "Make sure undefined is returned when no attribute is found." );
ok( jQuery().attr("doesntexist") === undefined, "Make sure undefined is returned when no element is there." );
}); });
if ( !isLocal ) { if ( !isLocal ) {