From 44599e174b5d1f924def5a3950375ead12b9d21b Mon Sep 17 00:00:00 2001 From: Brandon Aaron Date: Fri, 23 Feb 2007 02:53:22 +0000 Subject: [PATCH] * Fixed IE ID selectors selecting by the name attribute and added tests * Added href attribute test to test suite * Updated Changelog --- ChangeLog.txt | 2 ++ src/jquery/coreTest.js | 9 ++++++--- src/selector/selector.js | 8 ++++++-- src/selector/selectorTest.js | 8 ++++++-- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 40ec547..ba4ed5f 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -7,7 +7,9 @@ New and Noteworthy 1.1.2 ---- +* Fixed IE ID selectors selecting by the name attribute. * Change: Events are now internally stored in elem.$events rather than elem.events (due to a nasty bug relating to DOM 0 expandos). +* .attr('href') is now consistent in all browsers. * @href is now consistent in all browsers. * Fixed the slideDown flickering bug. * Having a \r endline in $("...") caused a never-ending loop. diff --git a/src/jquery/coreTest.js b/src/jquery/coreTest.js index 497d30d..25cb69b 100644 --- a/src/jquery/coreTest.js +++ b/src/jquery/coreTest.js @@ -74,7 +74,7 @@ test("index(Object)", function() { }); test("attr(String)", function() { - expect(14); + expect(15); ok( $('#text1').attr('value') == "Test", 'Check for value attribute' ); ok( $('#text1').attr('type') == "text", 'Check for type attribute' ); ok( $('#radio1').attr('type') == "radio", 'Check for type attribute' ); @@ -87,7 +87,10 @@ test("attr(String)", function() { ok( $('#name').attr('name') == "name", 'Check for name attribute' ); ok( $('#text1').attr('name') == "action", 'Check for name attribute' ); ok( $('#form').attr('action').indexOf("formaction") >= 0, 'Check for action attribute' ); - //equals( "#2", $('#anchor2').attr('href'), 'Check for non-absolute href (an anchor)' ); This fails in IE because the _config.fixture is reloaded using innerHTML + + $('').attr('href', '#5').appendTo('#main'); // using innerHTML in IE causes href attribute to be serialized to the full path + ok( $('#tAnchor5').attr('href') == "#5", 'Check for non-absolute href (an anchor)' ); + stop(); $.get("data/dashboard.xml", function(xml) { ok( $("locations", xml).attr("class") == "foo", "Check class attribute in XML document" ); @@ -242,7 +245,7 @@ test("append(String|Element|Array<Element>|jQuery)", function() { reset(); $("#sap").append(document.getElementById('form')); - ok( $("#sap>form").size() == 1, "Check for appending a form" ); + ok( $("#sap>form").size() == 1, "Check for appending a form" ); // Bug #910 }); diff --git a/src/selector/selector.js b/src/selector/selector.js index a6597f4..e1abbf4 100644 --- a/src/selector/selector.js +++ b/src/selector/selector.js @@ -223,11 +223,15 @@ jQuery.extend({ if ( m[1] == "#" && ret[ret.length-1].getElementById ) { // Optimization for HTML document case var oid = ret[ret.length-1].getElementById(m[2]); + + // Do a quick check for the existence of the actual ID attribute + // to avoid selecting by the name attribute in IE + if ( jQuery.browser.msie && oid && oid.id != m[2] ) + oid = jQuery('[@id="'+m[2]+'"]', ret[ret.length-1])[0]; // Do a quick check for node name (where applicable) so // that div#foo searches will be really fast - ret = r = oid && - (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : []; + ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : []; } else { // Pre-compile a regular expression to handle class searches diff --git a/src/selector/selectorTest.js b/src/selector/selectorTest.js index be216f8..c9cf762 100644 --- a/src/selector/selectorTest.js +++ b/src/selector/selectorTest.js @@ -11,7 +11,7 @@ test("expressions - element", function() { }); test("expressions - id", function() { - expect(11); + expect(13); t( "ID Selector", "#body", ["body"] ); t( "ID Selector w/ Element", "body#body", ["body"] ); t( "ID Selector w/ Element", "ul#first", [] ); @@ -25,7 +25,11 @@ test("expressions - id", function() { t( "All Children of ID", "#foo/*", ["sndp", "en", "sap"] ); t( "All Children of ID with no children", "#firstUL/*", [] ); - t( "ID selector with non-existant ancestor", "#asdfasdf #foobar", [] ); + $('tName1 AtName2 A
tName1 Div
').appendTo('#main'); + ok( $("#tName1")[0].id == 'tName1', "ID selector with same value for a name attribute" ); + ok( $("#tName2").length == 0, "ID selector non-existing but name attribute on an A tag" ); + + t( "ID selector with non-existant ancestor", "#asdfasdf #foobar", [] ); // bug #986 }); -- 1.7.10.4