mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Make removeClass smart enough to remove duplicates. Fixes #11923
This commit is contained in:
parent
4df3aaeab3
commit
3206be8772
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user