From 4f786ba4d2a5544cb48f589d2659d6cab84efc34 Mon Sep 17 00:00:00 2001 From: Richard Gibson Date: Sat, 20 Apr 2013 11:40:27 -0400 Subject: [PATCH] Fix #13797: .is with single-node context --- src/traversing.js | 18 ++++++++++-------- test/unit/traversing.js | 27 ++++++++++++++++++--------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/traversing.js b/src/traversing.js index 4a274806e..a9c9c9796 100644 --- a/src/traversing.js +++ b/src/traversing.js @@ -58,14 +58,16 @@ jQuery.fn.extend({ }, is: function( selector ) { - return !!selector && ( - typeof selector === "string" ? - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - rneedsContext.test( selector ) ? - jQuery( selector, this.context ).index( this[0] ) >= 0 : - jQuery.filter( selector, this ).length > 0 : - this.filter( selector ).length > 0 ); + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; }, closest: function( selectors, context ) { diff --git a/test/unit/traversing.js b/test/unit/traversing.js index b0e5011e8..b98abdcd4 100644 --- a/test/unit/traversing.js +++ b/test/unit/traversing.js @@ -141,16 +141,22 @@ test("is() with :has() selectors", function() { }); test("is() with positional selectors", function() { - expect(24); - - var isit = function(sel, match, expect) { - equal( jQuery( sel ).is( match ), expect, "jQuery('" + sel + "').is('" + match + "')" ); - }; - - jQuery( - "

firsttest

" - ).appendTo( "#qunit-fixture" ); + expect(27); + + var + posp = jQuery( + "

first" + + "test

" + ).appendTo( "#qunit-fixture" ), + isit = function( sel, match, expect ) { + equal( + jQuery( sel ).is( match ), + expect, + "jQuery('" + sel + "').is('" + match + "')" + ); + }; + isit( "#posp", "p:last", true ); isit( "#posp", "#posp:first", true ); isit( "#posp", "#posp:eq(2)", false ); isit( "#posp", "#posp a:first", false ); @@ -179,6 +185,9 @@ test("is() with positional selectors", function() { isit( "#posp em", "#posp a em:eq(2)", false ); ok( jQuery("#option1b").is("#select1 option:not(:first)"), "POS inside of :not() (#10970)" ); + + ok( jQuery( posp[0] ).is("p:last"), "context constructed from a single node (#13797)" ); + ok( !jQuery( posp[0] ).find("#firsta").is("a:first"), "context derived from a single node (#13797)" ); }); test("index()", function() { -- 2.39.5