]> source.dussan.org Git - jquery.git/commitdiff
CSS: Remove filter from style when setting opacity to 1 - Fixes #6652 - REMOVE FILTER...
authorgnarf <gnarf@gnarf.net>
Mon, 20 Jun 2011 09:39:12 +0000 (04:39 -0500)
committergnarf <gnarf@gnarf.net>
Mon, 20 Jun 2011 19:21:44 +0000 (14:21 -0500)
src/css.js

index cb7df9f80faf6bedd486730bd49e08df31520e5a..0d12f073b837430e2468e580b78880171d0d554b 100644 (file)
@@ -2,6 +2,7 @@
 
 var ralpha = /alpha\([^)]*\)/i,
        ropacity = /opacity=([^)]*)/,
+       rfilter = /filter:[^;]*;?/i,
        // fixed for IE9, see #8346
        rupper = /([A-Z]|^ms)/g,
        rnumpx = /^-?\d+(?:px)?$/i,
@@ -211,18 +212,28 @@ if ( !jQuery.support.opacity ) {
 
                set: function( elem, value ) {
                        var style = elem.style,
-                               currentStyle = elem.currentStyle;
+                               currentStyle = elem.currentStyle,
+                               opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")",
+                               filter = currentStyle && currentStyle.filter || style.filter || "";
 
                        // IE has trouble with opacity if it does not have layout
                        // Force it by setting the zoom level
                        style.zoom = 1;
 
-                       // Set the alpha filter to set the opacity
-                       var opacity = jQuery.isNaN( value ) ?
-                               "" :
-                               "alpha(opacity=" + value * 100 + ")",
-                               filter = currentStyle && currentStyle.filter || style.filter || "";
+                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+
+                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
+                               style.cssText = style.cssText.replace( rfilter, "" );
+
+                               // if there there is no filter style applied in a css rule, we are done
+                               if ( currentStyle && !currentStyle.filter ) {
+                                       return;
+                               }
+                       }
 
+                       // otherwise, set new filter values
                        style.filter = ralpha.test( filter ) ?
                                filter.replace( ralpha, opacity ) :
                                filter + " " + opacity;