From 90b25efa6c3c3676c5ae1dd782d04726e03a31e8 Mon Sep 17 00:00:00 2001 From: David Serduke Date: Mon, 17 Dec 2007 16:54:44 +0000 Subject: [PATCH] Fixed #2062 by adding a check to see if the selector is array-like in .not() before testing it as an array. Otherwise it does a straight comparison during the filter test. --- src/core.js | 5 ++++- test/unit/core.js | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core.js b/src/core.js index c7f30d6..1ec8de0 100644 --- a/src/core.js +++ b/src/core.js @@ -353,7 +353,10 @@ jQuery.fn = jQuery.prototype = { selector = jQuery.multiFilter( selector, this ); return this.filter(function() { - return jQuery.inArray( this, selector ) < 0; + // check to see if the selector is array-like otherwise assume it is just a DOM element + return ( selector.length && selector[selector.length - 1] !== undefined ) + ? jQuery.inArray( this, selector ) < 0 + : this != selector; }); }, diff --git a/test/unit/core.js b/test/unit/core.js index 088726f..ea687c8 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -1058,11 +1058,13 @@ test("filter()", function() { }); test("not()", function() { - expect(5); + expect(7); ok( $("#main > p#ap > a").not("#google").length == 2, "not('selector')" ); + ok( $("#main > p#ap > a").not(document.getElementById("google")).length == 2, "not(DOMElement)" ); isSet( $("p").not(".result").get(), q("firstp", "ap", "sndp", "en", "sap", "first"), "not('.class')" ); isSet( $("p").not("#ap, #sndp, .result").get(), q("firstp", "en", "sap", "first"), "not('selector, selector')" ); isSet( $("p").not($("#ap, #sndp, .result")).get(), q("firstp", "en", "sap", "first"), "not(jQuery)" ); + ok( $("p").not(document.getElementsByTagName("p")).length == 0, "not(Array-like DOM collection)" ); isSet( $("#form option").not("option.emptyopt:contains('Nothing'),[selected],[value='1']").get(), q("option1c", "option1d", "option2c", "option3d" ), "not('complex selector')"); }); -- 1.7.10.4