From 054daa20afc0e2c84e66f450b155d0253a62aedb Mon Sep 17 00:00:00 2001 From: Oleg Date: Tue, 8 Jan 2013 02:08:47 +0000 Subject: [PATCH] Ref #8908. Update IE9 css clone fix. Close gh-1119. --- src/css.js | 11 +++-------- src/support.js | 4 ++++ test/unit/css.js | 7 +++++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/css.js b/src/css.js index 6b800d6d3..2a7172759 100644 --- a/src/css.js +++ b/src/css.js @@ -216,18 +216,13 @@ jQuery.extend({ // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, // but it would mean to define eight (for every problematic property) identical functions - if ( value === "" && name.indexOf("background") === 0 ) { - value = " "; + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; } // If a hook was provided, use that value, otherwise just set the specified value if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - - // Wrapped to prevent IE from throwing errors when 'invalid' values are provided - // Fixes bug #5509 - try { - style[ name ] = value; - } catch(e) {} + style[ name ] = value; } } else { diff --git a/src/support.js b/src/support.js index f1de07d45..9950b33d4 100644 --- a/src/support.js +++ b/src/support.js @@ -64,6 +64,10 @@ jQuery.support = (function() { div.setAttribute( "onfocusin", "t" ); support.focusinBubbles = "onfocusin" in window || div.attributes.onfocusin.expando === false; + div.style.backgroundClip = "content-box"; + div.cloneNode().style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + // Run tests that need a body at doc ready jQuery(function() { var container, marginDiv, tds, diff --git a/test/unit/css.js b/test/unit/css.js index abc625933..8513913ee 100644 --- a/test/unit/css.js +++ b/test/unit/css.js @@ -883,7 +883,7 @@ test( "css opacity consistency across browsers (#12685)", function() { equal( Math.round( el.css("opacity") * 100 ), 20, "remove opacity override" ); }); -asyncTest( "Clearing a Cloned Element's Style Shouldn't Clear the Original Element's Style (#8908)", 16, function() { +asyncTest( "Clearing a Cloned Element's Style Shouldn't Clear the Original Element's Style (#8908)", 24, function() { var baseUrl = document.location.href.replace( /([^\/]*)$/, "" ), styles = [{ name: "backgroundAttachment", @@ -921,7 +921,7 @@ asyncTest( "Clearing a Cloned Element's Style Shouldn't Clear the Original Eleme expected: [ "auto auto" ] }]; - jQuery.each( styles, function(index, style) { + jQuery.each(styles, function( index, style ) { var $clone, $clonedChildren, $source = jQuery( "#firstp" ), source = $source[ 0 ], @@ -932,6 +932,7 @@ asyncTest( "Clearing a Cloned Element's Style Shouldn't Clear the Original Eleme if ( source.style[ style.name ] === undefined ) { ok( true, style.name + ": style isn't supported and therefore not an issue" ); ok( true ); + return true; } @@ -945,6 +946,8 @@ asyncTest( "Clearing a Cloned Element's Style Shouldn't Clear the Original Eleme $clonedChildren.css( style.name, "" ); window.setTimeout(function() { + notEqual( $clone.css( style.name ), style.value[ 0 ], "Cloned css was changed" ); + ok( jQuery.inArray( $source.css( style.name ) !== -1, style.value ), "Clearing clone.css() doesn't affect source.css(): " + style.name + "; result: " + $source.css( style.name ) + -- 2.39.5