From 16d2c4225f2e3cd7f42dfab62481940ccedd6314 Mon Sep 17 00:00:00 2001 From: Stephen Kraushaar Date: Sun, 20 Sep 2015 03:36:35 -0500 Subject: [PATCH] Do ClientRects have non-zero dimensions? Add detection of whether ClientRects have non-zero height and width. --- src/css/hiddenVisibleSelectors.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/css/hiddenVisibleSelectors.js b/src/css/hiddenVisibleSelectors.js index 9a8a28cf8d..78d0177898 100644 --- a/src/css/hiddenVisibleSelectors.js +++ b/src/css/hiddenVisibleSelectors.js @@ -7,7 +7,26 @@ jQuery.expr.filters.hidden = function( elem ) { return !jQuery.expr.filters.visible( elem ); }; jQuery.expr.filters.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); + + return !!( elem.offsetWidth || elem.offsetHeight || hasNonZeroDimensions(elem)); }; +function hasNonZeroDimensions(elem) { + //Logic dictates this is how dimensionsVisible should be initialized independently. + //As a helper method to jQuery.expr.filters.visible it is completely unnecessary + //And could be set to false. + var dimensionsVisible = !!( elem.offsetWidth || elem.offsetHeight); + var clientRects; + + if(!dimensionsVisible) { //Again, completely unnecessary in helper scenario + clientRects = elem.getClientRects(); //Helper scenario, combine with declaration + for(var i = 0; i < clientRects.length && !dimensionsVisible; i++) { + dimensionsVisible = !!(clientRects.item(i).width || clientRects.item(i).height); + } + } + + return dimensionsVisible; +} + + } );