]> source.dussan.org Git - jquery.git/commitdiff
Make sure that hide or show don't fail when operating on non-Element nodes. Fixes...
authorJohn Resig <jeresig@gmail.com>
Sun, 17 Apr 2011 18:07:42 +0000 (11:07 -0700)
committerJohn Resig <jeresig@gmail.com>
Sun, 17 Apr 2011 18:07:42 +0000 (11:07 -0700)
src/effects.js
test/unit/effects.js

index 2c7b44cb059d2adcf2fae27c6c9418196fa290fa..162de1266801bc387da2737fe57fc2c5fc188670 100644 (file)
@@ -28,19 +28,22 @@ jQuery.fn.extend({
                } else {
                        for ( var i = 0, j = this.length; i < j; i++ ) {
                                elem = this[i];
-                               display = elem.style.display;
 
-                               // Reset the inline display of this element to learn if it is
-                               // being hidden by cascaded rules or not
-                               if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-                                       display = elem.style.display = "";
-                               }
+                               if ( elem.style ) {
+                                       display = elem.style.display;
+
+                                       // Reset the inline display of this element to learn if it is
+                                       // being hidden by cascaded rules or not
+                                       if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+                                               display = elem.style.display = "";
+                                       }
 
-                               // 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" ) {
-                                       jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+                                       // 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" ) {
+                                               jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+                                       }
                                }
                        }
 
@@ -48,10 +51,13 @@ jQuery.fn.extend({
                        // to avoid the constant reflow
                        for ( i = 0; i < j; i++ ) {
                                elem = this[i];
-                               display = elem.style.display;
 
-                               if ( display === "" || display === "none" ) {
-                                       elem.style.display = jQuery._data(elem, "olddisplay") || "";
+                               if ( elem.style ) {
+                                       display = elem.style.display;
+
+                                       if ( display === "" || display === "none" ) {
+                                               elem.style.display = jQuery._data(elem, "olddisplay") || "";
+                                       }
                                }
                        }
 
@@ -75,7 +81,9 @@ jQuery.fn.extend({
                        // Set the display of the elements in a second loop
                        // to avoid the constant reflow
                        for ( i = 0; i < j; i++ ) {
-                               this[i].style.display = "none";
+                               if ( this[i].style ) {
+                                       this[i].style.display = "none";
+                               }
                        }
 
                        return this;
index 8b7cf46798bb16b4b1fb2c030ffe5ff5a47ad604..ec177454498a4a14ad88e45dd35cc090b2bb646c 100644 (file)
@@ -88,6 +88,10 @@ test("show()", function() {
                var elem = jQuery(selector, "#show-tests").show();
                equals( elem.css("display"), expected, "Show using correct display type for " + selector );
        });
+
+       // Make sure that showing or hiding a text node doesn't cause an error
+       jQuery("<div>test</div> text <span>test</span>").show().remove();
+       jQuery("<div>test</div> text <span>test</span>").hide().remove();
 });
 
 test("show(Number) - other displays", function() {