Commit 3206be87 authored by Rick Waldron's avatar Rick Waldron

Make removeClass smart enough to remove duplicates. Fixes #11923

parent 4df3aaea
...@@ -71,31 +71,30 @@ jQuery.fn.extend({ ...@@ -71,31 +71,30 @@ jQuery.fn.extend({
}, },
removeClass: function( value ) { removeClass: function( value ) {
var classNames, i, l, elem, className, c, cl; var removes, className, elem, c, cl, i, l;
if ( jQuery.isFunction( value ) ) { if ( jQuery.isFunction( value ) ) {
return this.each(function( j ) { return this.each(function( j ) {
jQuery( this ).removeClass( value.call(this, j, this.className) ); jQuery( this ).removeClass( value.call(this, j, this.className) );
}); });
} }
if ( (value && typeof value === "string") || value === undefined ) { if ( (value && typeof value === "string") || value === undefined ) {
classNames = ( value || "" ).split( core_rspace ); removes = ( value || "" ).split( core_rspace );
for ( i = 0, l = this.length; i < l; i++ ) { for ( i = 0, l = this.length; i < l; i++ ) {
elem = this[ i ]; elem = this[ i ];
if ( elem.nodeType === 1 && elem.className ) { if ( elem.nodeType === 1 && elem.className ) {
if ( value ) {
className = (" " + elem.className + " ").replace( rclass, " " );
for ( c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[ c ] + " ", " ");
}
elem.className = jQuery.trim( className );
} else { className = (" " + elem.className + " ").replace( rclass, " " );
elem.className = "";
// loop over each item in the removal list
for ( c = 0, cl = removes.length; c < cl; c++ ) {
// Remove until there is nothing to remove,
while ( className.indexOf(" " + removes[ c ] + " ") > -1 ) {
className = className.replace( " " + removes[ c ] + " " , " " );
}
} }
elem.className = value ? jQuery.trim( className ) : "";
} }
} }
} }
......
...@@ -1055,6 +1055,16 @@ test("removeClass(Function) with incoming value", function() { ...@@ -1055,6 +1055,16 @@ test("removeClass(Function) with incoming value", function() {
QUnit.reset(); QUnit.reset();
}); });
test("removeClass() removes duplicates", function() {
expect(1);
var $div = jQuery( jQuery.parseHTML("<div class='x x x'></div>") );
$div.removeClass("x");
ok( !$div.hasClass("x"), "Element with multiple same classes does not escape the wrath of removeClass()" );
});
var testToggleClass = function(valueObj) { var testToggleClass = function(valueObj) {
expect(17); expect(17);
......
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