Commit f4e5c172 authored by Dave Methvin's avatar Dave Methvin

Fix #11547. toLowerCase not work good on XML attributes.

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.
parent 0bde43ae
...@@ -338,19 +338,14 @@ jQuery.extend({ ...@@ -338,19 +338,14 @@ jQuery.extend({
}, },
removeAttr: function( elem, value ) { removeAttr: function( elem, value ) {
var propName, attrNames, name, l, isBool, var propName, attrNames, name, isBool,
i = 0; i = 0;
if ( value && elem.nodeType === 1 ) { if ( value && elem.nodeType === 1 ) {
if ( !jQuery.isXMLDoc( elem ) ) {
value = value.toLowerCase();
}
attrNames = value.split( core_rspace ); attrNames = value.split( core_rspace );
l = attrNames.length;
for ( ; i < l; i++ ) { for ( ; i < attrNames.length; i++ ) {
name = attrNames[ i ]; name = attrNames[ i ];
if ( name ) { if ( name ) {
......
...@@ -58,7 +58,7 @@ var createDashboardXML = function() { ...@@ -58,7 +58,7 @@ var createDashboardXML = function() {
<dashboard> \ <dashboard> \
<locations class="foo"> \ <locations class="foo"> \
<location for="bar" checked="different"> \ <location for="bar" checked="different"> \
<infowindowtab> \ <infowindowtab normal="ab" mixedCase="yes"> \
<tab title="Location"><![CDATA[blabla]]></tab> \ <tab title="Location"><![CDATA[blabla]]></tab> \
<tab title="Users"><![CDATA[blublu]]></tab> \ <tab title="Users"><![CDATA[blublu]]></tab> \
</infowindowtab> \ </infowindowtab> \
......
...@@ -496,7 +496,7 @@ test("attr('tabindex', value)", function() { ...@@ -496,7 +496,7 @@ test("attr('tabindex', value)", function() {
}); });
test("removeAttr(String)", function() { test("removeAttr(String)", function() {
expect( 10 ); expect( 12 );
var $first; var $first;
equal( jQuery("#mark").removeAttr( "class" ).attr("class"), undefined, "remove class" ); equal( jQuery("#mark").removeAttr( "class" ).attr("class"), undefined, "remove class" );
...@@ -520,6 +520,31 @@ test("removeAttr(String)", function() { ...@@ -520,6 +520,31 @@ test("removeAttr(String)", function() {
} catch(e) { } catch(e) {
ok( false, "Removing contenteditable threw an error (#10429)" ); 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() { test("removeAttr(Multi String, variable space width)", function() {
...@@ -1239,16 +1264,3 @@ test("coords returns correct values in IE6/IE7, see #10828", 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"); area = map.html("<area shape='rect' href='#' alt='a' /></map>").find("area");
equal( area.attr("coords"), undefined, "did not retrieve coords correctly"); 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" );
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment