diff --git a/src/css/hiddenVisibleSelectors.js b/src/css/hiddenVisibleSelectors.js index 9f27b8b9e..e340b16e6 100644 --- a/src/css/hiddenVisibleSelectors.js +++ b/src/css/hiddenVisibleSelectors.js @@ -6,15 +6,13 @@ define([ ], function( jQuery, support ) { jQuery.expr.filters.hidden = function( elem ) { - // Use OR instead of AND as the element is not visible if either is true - // See tickets #10406 and #13132 - return !elem.offsetWidth || !elem.offsetHeight || - (!support.reliableHiddenOffsets() && - ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none"); + return !jQuery.expr.filters.visible( elem ); }; jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ) && + ( support.reliableHiddenOffsets() || + ( ( elem.style && elem.style.display ) || jQuery.css( elem, "display" ) ) !== "none" ); }; }); diff --git a/test/unit/css.js b/test/unit/css.js index 9e7949f70..a673b4e51 100644 --- a/test/unit/css.js +++ b/test/unit/css.js @@ -982,9 +982,9 @@ test( "css opacity consistency across browsers (#12685)", function() { }); test( ":visible/:hidden selectors", function() { - expect( 16 ); + expect( 18 ); - var $newDiv, $br, $table; + var $div, $br, $table, $a; ok( jQuery("#nothiddendiv").is(":visible"), "Modifying CSS display: Assert element is visible" ); jQuery("#nothiddendiv").css({ display: "none" }); @@ -1000,11 +1000,14 @@ 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)" ); - $newDiv = jQuery("