if ( value === undefined ) {
return jQuery.curCSS( elem, name );
}
-
+
if ( typeof value === "number" && !rexclude.test(name) ) {
value += "px";
}
};
jQuery.extend({
- style: function( elem, name, value ) {
- // don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
- return undefined;
- }
-
- // ignore negative width and height values #1599
- if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {
- value = undefined;
- }
+ cssHooks: {
+ opacity: {
+ get: function( elem, force ) {
+ var style = elem.style;
+ if ( jQuery.support.opacity && !style.filter ) {
+ return false; // move along, nothing to see here
+ }
+
+ // IE uses filters for opacity
+ var ret = ropacity.test(elem.currentStyle.filter || "") ?
+ (parseFloat(RegExp.$1) / 100) + "" :
+ "";
+
+ return ret === "" ?
+ "1" :
+ ret;
+ },
+
+ set: function( elem, value ) {
+ var style = elem.style;
+ if ( jQuery.support.opacity && !style.filter ) {
+ return false; // move along, nothing to see here
+ }
- var style = elem.style || elem, set = value !== undefined;
-
- // IE uses filters for opacity
- if ( !jQuery.support.opacity && name === "opacity" && style.filter ) {
- if ( set ) {
// IE has trouble with opacity if it does not have layout
// Force it by setting the zoom level
style.zoom = 1;
var filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";
style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;
}
+ }
+ },
+
+ style: function( elem, name, value ) {
+ // don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return undefined;
+ }
- return style.filter && style.filter.indexOf("opacity=") >= 0 ?
- (parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":
- "";
+ // ignore negative width and height values #1599
+ if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {
+ value = undefined;
}
+ var style = elem.style || elem, set = value !== undefined;
+
// Make sure we're using the right name for getting the float value
if ( rfloat.test( name ) ) {
name = styleFloat;
name = name.replace(rdashAlpha, fcamelCase);
+ var hooks = jQuery.cssHooks[name] || {};
+
if ( set ) {
- style[ name ] = value;
+ if ( !('set' in hooks) || hooks.set( elem, value ) === false ) {
+ style[ name ] = value;
+ }
+ }
+
+ if ( 'get' in hooks ) {
+ var cssHookReturn = hooks.get( elem, false );
+ if ( cssHookReturn !== false ) {
+ return cssHookReturn;
+ }
}
return style[ name ];
},
curCSS: function( elem, name, force ) {
- var ret, style = elem.style, filter;
-
- // IE uses filters for opacity
- if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {
- ret = ropacity.test(elem.currentStyle.filter || "") ?
- (parseFloat(RegExp.$1) / 100) + "" :
- "";
-
- return ret === "" ?
- "1" :
- ret;
- }
+ var ret, style = elem.style, filter, hooks = jQuery.cssHooks[name] || {};
// Make sure we're using the right name for getting the float value
if ( rfloat.test( name ) ) {
name = styleFloat;
}
+ if ( 'get' in hooks && ( ret = hooks.get( elem, force ) ) !== false ) {
+ return ret;
+ }
+
if ( !force && style && style[ name ] ) {
ret = style[ name ];