]> source.dussan.org Git - jquery.git/commitdiff
Core: Throw an error on $("#") rather than returning 0-length collection
authorDave Methvin <dave.methvin@gmail.com>
Wed, 3 Dec 2014 19:51:24 +0000 (14:51 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Wed, 3 Dec 2014 19:55:33 +0000 (14:55 -0500)
Closes gh-1682

Thanks @goob for the issue report!
(cherry picked from commit 80022c81ce4a07a232afd3c580b0977555a2daec)

src/core/init.js
test/unit/core.js

index 340e378b874f7367133631d819abf4ffc6fe3ae4..c0f50d0c04b76563e2b1c8ab71701d1b968a172b 100644 (file)
@@ -14,7 +14,8 @@ var rootjQuery,
        // A simple way to check for HTML strings
        // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
        // Strict HTML recognition (#11290: must start with <)
-       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+       // Shortcut simple #id case for speed
+       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
 
        init = jQuery.fn.init = function( selector, context ) {
                var match, elem;
index 2fefb3725990a7ec808f133497865e20660f54a2..9d02f1a861939a2bd678bb164fe75c28401d9915 100644 (file)
@@ -57,10 +57,15 @@ test("jQuery()", function() {
        equal( jQuery(undefined).length, 0, "jQuery(undefined) === jQuery([])" );
        equal( jQuery(null).length, 0, "jQuery(null) === jQuery([])" );
        equal( jQuery("").length, 0, "jQuery('') === jQuery([])" );
-       equal( jQuery("#").length, 0, "jQuery('#') === jQuery([])" );
-
        equal( jQuery(obj).selector, "div", "jQuery(jQueryObj) == jQueryObj" );
 
+       // Invalid #id goes to Sizzle which will throw an error (gh-1682)
+       try {
+               jQuery( "#" );
+       } catch ( e ) {
+               ok( true, "Threw an error on #id with no id" );
+       }
+
        // can actually yield more than one, when iframes are included, the window is an array as well
        equal( jQuery(window).length, 1, "Correct number of elements generated for jQuery(window)" );