Make sure that [name=foo] and #id selectors don't use the native methods on XML docum...
authorJohn Resig <jeresig@gmail.com>
Wed, 21 Jan 2009 23:19:30 +0000 (23:19 +0000)
committerJohn Resig <jeresig@gmail.com>
Wed, 21 Jan 2009 23:19:30 +0000 (23:19 +0000)
src/selector.js
test/unit/selector.js

index 6a629bd..a250746 100644 (file)
@@ -55,7 +55,7 @@ var Sizzle = function(selector, context, results, seed) {
        } else {
                var ret = seed ?
                        { expr: parts.pop(), set: makeArray(seed) } :
-                       Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context );
+                       Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) );
                set = Sizzle.filter( ret.expr, ret.set );
 
                if ( parts.length > 0 ) {
@@ -120,7 +120,7 @@ Sizzle.matches = function(expr, set){
        return Sizzle(expr, null, null, set);
 };
 
-Sizzle.find = function(expr, context){
+Sizzle.find = function(expr, context, isXML){
        var set, match;
 
        if ( !expr ) {
@@ -135,7 +135,7 @@ Sizzle.find = function(expr, context){
 
                        if ( left.substr( left.length - 1 ) !== "\\" ) {
                                match[1] = (match[1] || "").replace(/\\/g, "");
-                               set = Expr.find[ type ]( match, context );
+                               set = Expr.find[ type ]( match, context, isXML );
                                if ( set != null ) {
                                        expr = expr.replace( Expr.match[ type ], "" );
                                        break;
@@ -315,14 +315,16 @@ var Expr = Sizzle.selectors = {
                }
        },
        find: {
-               ID: function(match, context){
-                       if ( context.getElementById ) {
+               ID: function(match, context, isXML){
+                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
                                var m = context.getElementById(match[1]);
                                return m ? [m] : [];
                        }
                },
-               NAME: function(match, context){
-                       return context.getElementsByName ? context.getElementsByName(match[1]) : null;
+               NAME: function(match, context, isXML){
+                       if ( typeof context.getElementsByName !== "undefined" && !isXML ) {
+                               return context.getElementsByName(match[1]);
+                       }
                },
                TAG: function(match, context){
                        return context.getElementsByTagName(match[1]);
index 0b2a328..07671c6 100644 (file)
@@ -21,11 +21,15 @@ test("element", function() {
 });
 
 if ( location.protocol != "file:" ) {
-       test("Element Selector with underscore", function() {
-               expect(1);
+       test("XML Document Selectors", function() {
+               expect(5);
                stop();
                jQuery.get("data/with_fries.xml", function(xml) {
                        equals( jQuery("foo_bar", xml).length, 1, "Element Selector with underscore" );
+                       equals( jQuery("property[name=prop2]", xml).length, 1, "Attribute selector with name" );
+                       equals( jQuery("[name=prop2]", xml).length, 1, "Attribute selector with name" );
+                       equals( jQuery("#seite1", xml).length, 1, "Attribute selector with name" );
+                       equals( jQuery("component#seite1", xml).length, 1, "Attribute selector with name" );
                        start();
                });
        });