Make sure that [name=FOO] searches actually have the specified name (IE includes elements that have the ID, as well).

This commit is contained in:
John Resig 2009-02-15 22:33:19 +00:00
parent 20827707a9
commit 22c9c9b9d3
2 changed files with 16 additions and 2 deletions

View File

@ -332,7 +332,14 @@ var Expr = Sizzle.selectors = {
}, },
NAME: function(match, context, isXML){ NAME: function(match, context, isXML){
if ( typeof context.getElementsByName !== "undefined" ) { if ( typeof context.getElementsByName !== "undefined" ) {
var ret = context.getElementsByName(match[1]); var ret = [], results = context.getElementsByName(match[1]);
for ( var i = 0, l = results.length; i < l; i++ ) {
if ( results[i].getAttribute("name") === match[1] ) {
ret.push( results[i] );
}
}
return ret.length === 0 ? null : ret; return ret.length === 0 ? null : ret;
} }
}, },

View File

@ -144,7 +144,7 @@ test("class", function() {
}); });
test("name", function() { test("name", function() {
expect(9); expect(11);
t( "Name selector", "input[name=action]", ["text1"] ); t( "Name selector", "input[name=action]", ["text1"] );
t( "Name selector with single quotes", "input[name='action']", ["text1"] ); t( "Name selector with single quotes", "input[name='action']", ["text1"] );
@ -158,6 +158,13 @@ test("name", function() {
isSet( jQuery("#form").find("input[name=action]"), q("text1"), "Name selector within the context of another element" ); isSet( jQuery("#form").find("input[name=action]"), q("text1"), "Name selector within the context of another element" );
isSet( jQuery("#form").find("input[name='foo[bar]']"), q("hidden2"), "Name selector for grouped form element within the context of another element" ); isSet( jQuery("#form").find("input[name='foo[bar]']"), q("hidden2"), "Name selector for grouped form element within the context of another element" );
var a = jQuery('<a id="tName1ID" name="tName1">tName1 A</a><a id="tName2ID" name="tName2">tName2 A</a><div id="tName1">tName1 Div</div>').appendTo('#main');
t( "Find elements that have similar IDs", "[name=tName1]", ["tName1ID"] );
t( "Find elements that have similar IDs", "[name=tName2]", ["tName2ID"] );
a.remove();
}); });