]> source.dussan.org Git - jquery.git/commitdiff
Traversing: .not/.filter consistency with non-elements
authorMartijn W. van der Lee <martijn@vanderlee.com>
Mon, 11 Jan 2016 19:59:33 +0000 (20:59 +0100)
committerTimmy Willison <timmywillisn@gmail.com>
Wed, 13 Jan 2016 18:33:01 +0000 (13:33 -0500)
Fixes gh-2808
Close gh-2809

src/traversing/findFilter.js
test/unit/traversing.js

index ee76a57a7525b511967a7d9355fab21e20900ac0..f3a929e539b23af88dd0a8ade1d257018f2ebb56 100644 (file)
@@ -33,7 +33,7 @@ function winnow( elements, qualifier, not ) {
        }
 
        return jQuery.grep( elements, function( elem ) {
-               return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+               return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
        } );
 }
 
index 7766fd3cb8aa1123621d5a726ca48b88c7860689..d38d40be5f73406073ddc4ac26c8112c539aa9e3 100644 (file)
@@ -430,6 +430,17 @@ QUnit.test( "not(jQuery)", function( assert ) {
        assert.deepEqual( jQuery( "p" ).not( jQuery( "#ap, #sndp, .result" ) ).get(), q( "firstp", "en", "sap", "first" ), "not(jQuery)" );
 } );
 
+QUnit.test( "not(Selector) excludes non-element nodes (gh-2808)", function( assert ) {
+       assert.expect( 3 );
+
+       var mixedContents = jQuery( "#nonnodes" ).contents(),
+               childElements = q( "nonnodesElement" );
+
+       assert.deepEqual( mixedContents.not( "*" ).get(), [], "not *" );
+       assert.deepEqual( mixedContents.not( "[id=a],[id=b]" ).get(), childElements, "not [id=a],[id=b]" );
+       assert.deepEqual( mixedContents.not( "[id=a],*,[id=b]" ).get(), [], "not [id=a],*,[id=b]" );
+} );
+
 QUnit.test( "has(Element)", function( assert ) {
        assert.expect( 3 );
        var obj, detached, multipleParent;