]> source.dussan.org Git - jquery.git/commitdiff
Fix #11547. toLowerCase not work good on XML attributes.
authorDave Methvin <dave.methvin@gmail.com>
Thu, 12 Jul 2012 02:46:34 +0000 (22:46 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Thu, 12 Jul 2012 03:09:07 +0000 (23:09 -0400)
This was fixed to some extent in gh-724 but there were insufficient test cases. Removing the lowercase completely allows IE 6/7 to work properly since there you need an exact case match for attributes, even in HTML docs. More discussion and test cases in the comments on gh-724.

src/attributes.js
test/data/testinit.js
test/unit/attributes.js

index 879064b2a7cad9bcce931c89198693a2e91081a5..c3890c459b1c3215643488162a30053ac992691c 100644 (file)
@@ -338,19 +338,14 @@ jQuery.extend({
        },
 
        removeAttr: function( elem, value ) {
-               var propName, attrNames, name, l, isBool,
+               var propName, attrNames, name, isBool,
                        i = 0;
 
                if ( value && elem.nodeType === 1 ) {
 
-                       if ( !jQuery.isXMLDoc( elem ) ) {
-                               value = value.toLowerCase();
-                       }
-
                        attrNames = value.split( core_rspace );
-                       l = attrNames.length;
 
-                       for ( ; i < l; i++ ) {
+                       for ( ; i < attrNames.length; i++ ) {
                                name = attrNames[ i ];
 
                                if ( name ) {
index 7d340acee42c212fa4008aa8cab21a8c78268647..18f9e28459903648aa7e1bb15ba1036e0caf84e4 100644 (file)
@@ -58,7 +58,7 @@ var createDashboardXML = function() {
        <dashboard> \
                <locations class="foo"> \
                        <location for="bar" checked="different"> \
-                               <infowindowtab> \
+                               <infowindowtab normal="ab" mixedCase="yes"> \
                                        <tab title="Location"><![CDATA[blabla]]></tab> \
                                        <tab title="Users"><![CDATA[blublu]]></tab> \
                                </infowindowtab> \
index d5477b6276c45cb5bdc99092d5e76322caa2c475..07608b4bd5ccbc18fdac57def1a043addc8138d9 100644 (file)
@@ -496,7 +496,7 @@ test("attr('tabindex', value)", function() {
 });
 
 test("removeAttr(String)", function() {
-       expect( 10 );
+       expect( 12 );
        var $first;
 
        equal( jQuery("#mark").removeAttr( "class" ).attr("class"), undefined, "remove class" );
@@ -520,6 +520,31 @@ test("removeAttr(String)", function() {
        } catch(e) {
                ok( false, "Removing contenteditable threw an error (#10429)" );
        }
+       
+       $first = jQuery("<div Case='mixed'></div>");
+       equal( $first.attr("Case"), "mixed", "case of attribute doesn't matter" );
+       $first.removeAttr("Case");
+       // IE 6/7 return empty string here, not undefined
+       ok( !$first.attr("Case"), "mixed-case attribute was removed" );
+});
+
+test("removeAttr(String) in XML", function() {
+       expect( 7 );
+       var xml = createDashboardXML(),
+               iwt = jQuery( "infowindowtab", xml );
+
+       equal( iwt.attr("normal"), "ab", "Check initial value" );
+       iwt.removeAttr("Normal");
+       equal( iwt.attr("normal"), "ab", "Should still be there" );
+       iwt.removeAttr("normal");
+       equal( iwt.attr("normal"), undefined, "Removed" );
+
+       equal( iwt.attr("mixedCase"), "yes", "Check initial value" );
+       equal( iwt.attr("mixedcase"), undefined, "toLowerCase not work good" );
+       iwt.removeAttr("mixedcase");
+       equal( iwt.attr("mixedCase"), "yes", "Should still be there" );
+       iwt.removeAttr("mixedCase");
+       equal( iwt.attr("mixedCase"), undefined, "Removed" );
 });
 
 test("removeAttr(Multi String, variable space width)", function() {
@@ -1239,16 +1264,3 @@ test("coords returns correct values in IE6/IE7, see #10828", function() {
        area = map.html("<area shape='rect' href='#' alt='a' /></map>").find("area");
        equal( area.attr("coords"), undefined, "did not retrieve coords correctly");
 });
-
-test("Handle cased attributes on XML DOM correctly in removeAttr()", function() {
-       expect(1);
-
-       var xmlStr = "<root><item fooBar='123' /></root>",
-               $xmlDoc = jQuery( jQuery.parseXML( xmlStr ) ),
-               $item = $xmlDoc.find( "item" ),
-               el = $item[0];
-
-       $item.removeAttr( "fooBar" );
-
-       equal( el.attributes.length, 0, "attribute with upper case did not get removed" );
-});