]> source.dussan.org Git - jquery.git/commitdiff
Fix #10006: Allow .show() to work on detached elements.
authorOleg <markelog@gmail.com>
Fri, 13 Jan 2012 00:40:41 +0000 (19:40 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Fri, 13 Jan 2012 00:57:04 +0000 (19:57 -0500)
src/effects.js
test/unit/effects.js
test/unit/queue.js

index 926b40b54bce0f3f6c2d0bf84f6df3772e4e34a5..6716e616a859ca03fb4d66afd9a9bcd9ff4fa53b 100644 (file)
@@ -38,7 +38,8 @@ jQuery.fn.extend({
                                        // Set elements which have been overridden with display: none
                                        // in a stylesheet to whatever the default browser style is
                                        // for such an element
-                                       if ( display === "" && jQuery.css(elem, "display") === "none" ) {
+                                       if ( (display === "" && jQuery.css(elem, "display") === "none") ||
+                                               !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
                                                jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
                                        }
                                }
index 1728cf8f9912eedd55873aca7b45d31e2141be60..49fa33d426742e471c8af1f350201d8bf78d3e96 100644 (file)
@@ -188,6 +188,60 @@ test("show() resolves correct default display #8099", function() {
 
 });
 
+test( "show() resolves correct default display, detached nodes (#10006)", function(){
+       // Tests originally contributed by Orkel in
+       // https://github.com/jquery/jquery/pull/458
+       expect( 11 );
+
+       var div, span;
+
+       div = jQuery("<div class='hidden'>");
+       div.show().appendTo("#qunit-fixture");
+       equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through stylesheets ) div is visible." );
+
+       div = jQuery("<div style='display: none'>");
+       div.show().appendTo("#qunit-fixture");
+       equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through inline style ) div is visible." );
+
+       span = jQuery("<span class='hidden'/>");
+       span.show().appendTo("#qunit-fixture");
+       equal( span.css("display"), "inline", "Make sure a detached, pre-hidden( through stylesheets ) span has default display." );
+
+       span = jQuery("<span style='display: inline'/>");
+       span.show().appendTo("#qunit-fixture");
+       equal( span.css("display"), "inline", "Make sure a detached, pre-hidden( through inline style ) span has default display." );
+
+       div = jQuery("<div><div class='hidden'></div></div>").children("div");
+       div.show().appendTo("#qunit-fixture");
+       equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through stylesheets ) div inside another visible div is visible." );
+
+       div = jQuery("<div><div style='display: none'></div></div>").children("div");
+       div.show().appendTo("#qunit-fixture");
+       equal( div.css("display"), "block", "Make sure a detached, pre-hidden( through inline style ) div inside another visible div is visible." );
+
+       div = jQuery("div.hidden");
+       div.detach().show();
+       equal( div.css("display"), "block", "Make sure a detached( through detach() ), pre-hidden div is visible." );
+       div.remove();
+
+       span = jQuery("<span>");
+       span.appendTo("#qunit-fixture").detach().show().appendTo("#qunit-fixture" );
+       equal( span.css("display"), "inline", "Make sure a detached( through detach() ), pre-hidden span has default display." );
+       span.remove();
+
+       div = jQuery("<div>");
+       div.show().appendTo("#qunit-fixture");
+       ok( !!div.get( 0 ).style.display, "Make sure not hidden div has a inline style." );
+
+       div = jQuery( document.createElement("div") );
+       div.show().appendTo("#qunit-fixture");
+       equal( div.css("display"), "block", "Make sure a pre-created element has default display." );
+
+       div = jQuery("<div style='display: inline'/>");
+       div.show().appendTo("#qunit-fixture");
+       equal( div.css("display"), "inline", "Make sure that element has same display when it was created." );
+});
+
 
 test("animate(Hash, Object, Function)", function() {
        expect(1);
index 70195605031554aabe488c74e7a475b3cf652879..bb2d6ba9e6804a6d0bb53f2a5ace5914f790b562 100644 (file)
@@ -113,6 +113,7 @@ test("callbacks keep their place in the queue", function() {
 
        div.promise("fx").done(function() {
                equal(counter, 4, "Deferreds resolved");
+               jQuery.removeData( div[0], "olddisplay", true );
                start();
        });
 });