not() fails to filter out a single DOM element. Test:
Index: test/unit/core.js
===================================================================
--- test/unit/core.js (revision 4206)
+++ test/unit/core.js (working copy)
@@ -1058,7 +1058,7 @@
});
test("not()", function() {
- expect(7);
+ expect(8);
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')" );
@@ -1066,6 +1066,9 @@
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')");
+
+ var selects = $("#form select");
+ isSet( selects.not( selects[1] ), ["select1", "select3"], "filter out DOM element");
});
test("andSelf()", function() {
Most likely the optimization in not() caused this to regress:
return this.filter(function() {
// 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;