]> source.dussan.org Git - jquery.git/commitdiff
CSS: fix visible/hidden for IE6/7
authorTimmy Willison <timmywillisn@gmail.com>
Wed, 6 Jan 2016 01:10:06 +0000 (20:10 -0500)
committerTimmy Willison <timmywillisn@gmail.com>
Wed, 6 Jan 2016 19:05:17 +0000 (14:05 -0500)
src/css/hiddenVisibleSelectors.js
src/css/support.js

index 46c2cb8270ebdec80ed5d2a8d65ced9a057ed454..899b9eca4735b51cf713f181dd72b4628651c5af 100644 (file)
@@ -5,14 +5,32 @@ define( [
        "../css"
 ], function( jQuery, support ) {
 
+function getDisplay( elem ) {
+       return elem.style && elem.style.display || jQuery.css( elem, "display" );
+}
+
+function filterHidden( elem ) {
+       while ( elem && elem.nodeType === 1 ) {
+               if ( getDisplay( elem ) === "none" || elem.type === "hidden" ) {
+                       return true;
+               }
+               elem = elem.parentNode;
+       }
+       return false;
+}
+
 jQuery.expr.filters.hidden = function( elem ) {
-       return !jQuery.expr.filters.visible( elem );
+
+       // Support: Opera <= 12.12
+       // Opera reports offsetWidths and offsetHeights less than zero on some elements
+       return support.reliableHiddenOffsets() ?
+               ( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 &&
+                       !elem.getClientRects().length ) :
+                       filterHidden( elem );
 };
 
 jQuery.expr.filters.visible = function( elem ) {
-       return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ) &&
-               ( support.reliableHiddenOffsets() ||
-               ( ( elem.style && elem.style.display ) || jQuery.css( elem, "display" ) ) !== "none" );
+       return !jQuery.expr.filters.hidden( elem );
 };
 
 } );
index 97d6d4aa1a3e1a1958f41eca1cefffb11150e2da..6ff4cb19f99c0bada7b4936dd5343049162fd698 100644 (file)
@@ -159,7 +159,8 @@ define( [
                div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
                contents = div.getElementsByTagName( "td" );
                contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
-               reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
+               reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0 &&
+                       contents[ 0 ].getClientRects().length === 0;
                if ( reliableHiddenOffsetsVal ) {
                        contents[ 0 ].style.display = "";
                        contents[ 1 ].style.display = "none";