]> source.dussan.org Git - jquery.git/commitdiff
CSS: disconnected elements should be hidden
authorTimmy Willison <timmywillisn@gmail.com>
Thu, 14 Apr 2016 17:45:54 +0000 (13:45 -0400)
committerTimmy Willison <timmywillisn@gmail.com>
Wed, 11 May 2016 22:24:00 +0000 (18:24 -0400)
Fixes gh-3043

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

index 899b9eca4735b51cf713f181dd72b4628651c5af..e75ff5fc3955c0f3ee12358ac3c0b8aa20e01bff 100644 (file)
@@ -1,15 +1,21 @@
 define( [
        "../core",
+       "../var/document",
        "./support",
        "../selector",
        "../css"
-], function( jQuery, support ) {
+], function( jQuery, document, support ) {
 
 function getDisplay( elem ) {
        return elem.style && elem.style.display || jQuery.css( elem, "display" );
 }
 
 function filterHidden( elem ) {
+
+       // Disconnected elements are considered hidden
+       if ( !jQuery.contains( elem.ownerDocument || document, elem ) ) {
+               return true;
+       }
        while ( elem && elem.nodeType === 1 ) {
                if ( getDisplay( elem ) === "none" || elem.type === "hidden" ) {
                        return true;
index 58e9e1364ccbd3a923503ae449889354c5be87f5..69463e74b8ef58aad329a9b447e91ebf51a405fb 100644 (file)
@@ -1059,7 +1059,7 @@ QUnit.test( "css opacity consistency across browsers (#12685)", function( assert
 } );
 
 QUnit.test( ":visible/:hidden selectors", function( assert ) {
-       assert.expect( 17 );
+       assert.expect( 19 );
 
        var $div, $table, $a;
 
@@ -1100,6 +1100,9 @@ QUnit.test( ":visible/:hidden selectors", function( assert ) {
 
        $a = jQuery( "<a href='#'><h1>Header</h1></a>" ).appendTo( "#qunit-fixture" );
        assert.ok( $a.is( ":visible" ), "Anchor tag with flow content is visible (gh-2227)" );
+
+       assert.ok( !jQuery( "<div>Test</div>" ).is( ":visible" ), "Disconnected element is not visible" );
+       assert.ok( !jQuery( "<div><div>Test</div></div>" ).find("div").is( ":visible" ), "Disconnected element child is not visible" );
 } );
 
 QUnit.test( "Keep the last style if the new one isn't recognized by the browser (#14836)", function( assert ) {