// 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 ) {
- // IE9/10 Clearing Cloned Style Clear's Original Style. Fixes bug #8908
- value = !jQuery.support.clearCloneStyle && value === "" && name.match( /backgroundPosition/ ) ? "0% 0%" : value;
+
// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
// Fixes bug #5509
try {
};
});
++if ( !jQuery.support.clearCloneStyle ) {
++ // #8908, this part for IE9 only; see gh-886
++ jQuery.cssHooks.backgroundPosition = {
++ set: function( elem, value ) {
++ return value === "" ? "0% 0%" : value;
++ }
++ };
++}
++
if ( !jQuery.support.opacity ) {
jQuery.cssHooks.opacity = {
get: function( elem, computed ) {
}
}
- support.clearCloneStyle = (function() {
- var source = document.createElement( "div" ),
- styleName = "backgroundClip",
- value = "content-box",
- clone;
-
- source.style[ styleName ] = value;
- clone = source.cloneNode( true );
- clone.style[ styleName ] = "";
-
- return source.style[ styleName ] === value;
- })();
++ div.style.backgroundClip = "content-box";
++ div.cloneNode( true ).style.backgroundClip = "";
++ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
// Run tests that need a body at doc ready
jQuery(function() {
var container, div, tds, marginDiv,
equal( jQuery(elem).clone().attr("id","clone")[0].checked, true, "Checked true state correctly cloned" );
});
- { name: "backgroundImage", value: [ 'url("test.png")', 'url(' + baseUrl + 'test.png)', 'url("' + baseUrl + 'test.png")' ], expected: [ "none", 'url("http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif")' ] }, // Firefox returns auto's value
+ test( "Clearing a Cloned Element's Style Shouldn't Clear the Original Element's Style (#8908)", function() {
+ expect( 16 );
+
+ var baseUrl = document.location.href.replace( /([^\/]*)$/, "" );
+ var styles = [
+ { name: "backgroundAttachment", value: [ "fixed" ], expected: [ "scroll" ] },
+ { name: "backgroundColor", value: [ "rgb(255, 0, 0)", "rgb(255,0,0)", "#ff0000" ], expected: [ "transparent" ] },
- "Clearning clone.css() doesn't affect source.css(): " + style.name +
++ { name: "backgroundImage", value: [ "url('test.png')", "url(" + baseUrl + "test.png)", "url(\"" + baseUrl + "test.png\")" ], expected: [ "none", "url(\"http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif\")" ] }, // Firefox returns auto's value
+ { name: "backgroundPosition", value: [ "5% 5%" ], expected: [ "0% 0%", "-1000px 0px", "-1000px 0%" ] },
+ { name: "backgroundRepeat", value: [ "repeat-y" ], expected: [ "repeat", "no-repeat" ] }, // Firefox returns no-repeat
+ { name: "backgroundClip", value: [ "padding-box" ], expected: [ "border-box" ] },
+ { name: "backgroundOrigin", value: [ "content-box" ], expected: [ "padding-box" ] },
+ { name: "backgroundSize", value: [ "80px 60px" ], expected: [ "auto auto" ] }
+ ];
+
+ jQuery.each( styles, function(index, style) {
+ var $source, source, $clone;
+
+ style.expected = style.expected.concat( [ "", "auto" ] );
+ $source = jQuery( "<div />" );
+ source = $source[ 0 ];
+ if ( source.style[ style.name ] === undefined ) {
+ ok( true, style.name + ": style isn't supported and therefore not an issue" );
+ ok( true );
+ return true;
+ }
+ $source.css( style.name, style.value[0] );
+ $clone = $source.clone();
+ $clone.css( style.name, "" );
+
+ ok( ~jQuery.inArray( $source.css( style.name ), style.value ),
- "The cloned element was reset to it's default value: " + style.name +
++ "Clearing clone.css() doesn't affect source.css(): " + style.name +
+ "; result: " + $source.css( style.name ) +
+ "; expected: " + style.value.join( "," ) );
+ ok( ~jQuery.inArray( $clone.css( style.name ), style.expected ),
-});
++ "Cloned element was reset to its default value: " + style.name +
+ "; result: " + $clone.css( style.name ) +
+ "; expected: " + style.expected.join( "," ) );
+ });
++});
++
+test("manipulate mixed jQuery and text (#12384, #12346)", function() {
+ expect(2);
+
+ var div = jQuery("<div>a</div>").append( " ", jQuery("<span>b</span>"), " ", jQuery("<span>c</span>") ),
+ nbsp = String.fromCharCode(160);
+ equal( div.text(), "a" + nbsp + "b" + nbsp+ "c", "Appending mixed jQuery with text nodes" );
+
+ div = jQuery("<div><div></div></div>")
+ .find("div")
+ .after("<p>a</p>", "<p>b</p>" )
+ .parent();
+ equal( div.find("*").length, 3, "added 2 paragraphs after inner div" );
+});
+
+testIframeWithCallback( "buildFragment works even if document[0] is iframe's window object in IE9/10 (#12266)", "manipulation/iframe-denied.html", function( test ) {
+ expect( 1 );
+
+ ok( test.status, test.description );
+});