diff --git a/src/css/hiddenVisibleSelectors.js b/src/css/hiddenVisibleSelectors.js index 01ecc3396..b4d7482e8 100644 --- a/src/css/hiddenVisibleSelectors.js +++ b/src/css/hiddenVisibleSelectors.js @@ -4,12 +4,10 @@ define([ ], function( jQuery ) { 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; + 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 ); }; }); diff --git a/test/unit/css.js b/test/unit/css.js index b977b067c..a3be0d405 100644 --- a/test/unit/css.js +++ b/test/unit/css.js @@ -924,9 +924,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" }); @@ -942,11 +942,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("