]> source.dussan.org Git - jquery.git/commitdiff
CSS: elements are hidden when either offsetWidth or offsetHeight is zero
authorTimmy Willison <timmywillisn@gmail.com>
Thu, 17 Jul 2014 23:53:57 +0000 (16:53 -0700)
committerTimmy Willison <timmywillisn@gmail.com>
Fri, 18 Jul 2014 00:03:35 +0000 (17:03 -0700)
- Note: this is a breaking change that has been delayed for several versions.

Fixes #10406
Fixes #13132

src/css/hiddenVisibleSelectors.js
test/unit/css.js

index c7f1c7ee73966e0563a6cc890ff51216342c5cd5..2b1eb81553a505562dac2dfd3d0ec2cedc7e263c 100644 (file)
@@ -6,7 +6,9 @@ define([
 jQuery.expr.filters.hidden = function( elem ) {
        // Support: Opera <= 12.12
        // Opera reports offsetWidths and offsetHeights less than zero on some elements
-       return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
+       // Use OR instead of AND as the element is not visible if either is true
+       // See tickets #10406 and #13132
+       return elem.offsetWidth <= 0 || elem.offsetHeight <= 0;
 };
 jQuery.expr.filters.visible = function( elem ) {
        return !jQuery.expr.filters.hidden( elem );
index 58f43143ab8c6a377b37170f9bad90e51f09b30d..8337f7df75398c3771838c61160d5955d2f53def 100644 (file)
@@ -886,15 +886,17 @@ test( "css opacity consistency across browsers (#12685)", function() {
 });
 
 test( ":visible/:hidden selectors", function() {
-       expect( 13 );
+       expect( 16 );
+
+       var $newDiv, $br, $table;
 
        ok( jQuery("#nothiddendiv").is(":visible"), "Modifying CSS display: Assert element is visible" );
        jQuery("#nothiddendiv").css({ display: "none" });
        ok( !jQuery("#nothiddendiv").is(":visible"), "Modified CSS display: Assert element is hidden" );
-       jQuery("#nothiddendiv").css({"display": "block"});
+       jQuery("#nothiddendiv").css({ "display": "block" });
        ok( jQuery("#nothiddendiv").is(":visible"), "Modified CSS display: Assert element is visible");
-       ok( jQuery(window).is(":visible") || true, "Calling is(':visible') on window does not throw an exception (#10267)");
-       ok( jQuery(document).is(":visible") || true, "Calling is(':visible') on document does not throw an exception (#10267)");
+       ok( !jQuery(window).is(":visible"), "Calling is(':visible') on window does not throw an exception (#10267).");
+       ok( !jQuery(document).is(":visible"), "Calling is(':visible') on document does not throw an exception (#10267).");
 
        ok( jQuery("#nothiddendiv").is(":visible"), "Modifying CSS display: Assert element is visible");
        jQuery("#nothiddendiv").css("display", "none");
@@ -902,13 +904,13 @@ test( ":visible/:hidden selectors", function() {
        jQuery("#nothiddendiv").css("display", "block");
        ok( jQuery("#nothiddendiv").is(":visible"), "Modified CSS display: Assert element is visible");
 
-       // ok( !jQuery("#siblingspan").is(":visible"), "Span with no content not visible (#13132)" );
-       // var $newDiv = jQuery("<div><span></span></div>").appendTo("#qunit-fixture");
-       // equal( $newDiv.find(":visible").length, 0, "Span with no content not visible (#13132)" );
-       // var $br = jQuery("<br/>").appendTo("#qunit-fixture");
-       // ok( !$br.is(":visible"), "br element not visible (#10406)");
+       ok( !jQuery("#siblingspan").is(":visible"), "Span with no content not visible (#13132)" );
+       $newDiv = jQuery("<div><span></span></div>").appendTo("#qunit-fixture");
+       equal( $newDiv.find(":visible").length, 0, "Span with no content not visible (#13132)" );
+       $br = jQuery("<br/>").appendTo("#qunit-fixture");
+       ok( !$br.is(":visible"), "br element not visible (#10406)");
 
-       var $table = jQuery("#table");
+       $table = jQuery("#table");
        $table.html("<tr><td style='display:none'>cell</td><td>cell</td></tr>");
        equal(jQuery("#table td:visible").length, 1, "hidden cell is not perceived as visible (#4512). Works on table elements");
        $table.css("display", "none").html("<tr><td>cell</td><td>cell</td></tr>");