Skip to content
Permalink
Browse files

Make removeClass smart enough to remove duplicates. Fixes #11923

  • Loading branch information...
rwaldron committed Jun 23, 2012
1 parent 4df3aae commit 3206be877250f5fe958a0519ef19d52e277687ca
Showing with 21 additions and 12 deletions.
  1. +11 −12 src/attributes.js
  2. +10 −0 test/unit/attributes.js
@@ -71,31 +71,30 @@ jQuery.fn.extend({
},

removeClass: function( value ) {
var classNames, i, l, elem, className, c, cl;
var removes, className, elem, c, cl, i, l;

if ( jQuery.isFunction( value ) ) {
return this.each(function( j ) {
jQuery( this ).removeClass( value.call(this, j, this.className) );
});
}

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++ ) {
elem = this[ i ];

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 {
elem.className = "";
className = (" " + elem.className + " ").replace( rclass, " " );

// 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() {
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) {
expect(17);

0 comments on commit 3206be8

Please sign in to comment.
You can’t perform that action at this time.